8
votes

Comment exclure les messages protégés par mot de passe dans WordPress Boop

J'ai un type de poste personnalisé prenant en charge les entrées protégées par mot de passe. Dans une boucle personnalisée à l'aide d'un nouvel objet WP_Query, je souhaite exclure ces postes protégés par mot de passe des résultats. Quels arguments ai-je besoin ensemble pour faire cela? J'utilise la dernière version du coffre de WordPress 3.2.1.


1 commentaires

Puisque WordPress 3.9 Il existe également un has_password Query Arg que vous pouvez utiliser.


5 Réponses :


0
votes

Avez-vous consulté le Argument post_status de wp_query?

"Protégé" semble être un bon candidat à exclure.

EDIT: D'accord, il semble que vous fassiez modifier la clause où réaliser ce que vous voulez: xxx


6 commentaires

Oui, je l'ai vu, mais il semble que cet argument soit permissive du statut de poste I.e. Post_Status = Protégé inclura tous les statuts protégés, à moins que je ne l'utilise pas de manière incorrecte?


Simplement spéculer, mais avez-vous essayé post_status = -Protected?


Le filtre post_where est le moyen d'aller.


Fermer mais pas tout à fait ;-). Là où devrait être post_password = '' mais cela s'applique à la visualisation des entrées simples, alors qu'il leur excluait des modèles d'archives, etc. Il rend également un 404 lorsque vous essayez d'accéder à une seule page.


@Kevin désolé pour encore un autre commentaire, mais je ne peux pas faire de mes tests en ce moment ... Emballage de l'instruction add_filter () dans un si (! Is_single ()) < / Code> Aidez le numéro 404?


Oui, cela fonctionne certainement, bien que cela semble un peu piraté si nous ne pouvons pas le faire comme un argument de WP_Query. Merci pour votre réponse.



0
votes

Après un morceau de jeu, j'ai trouvé le filtre des pots_where un peu trop intrusif pour ce que je voulais faire, alors je suis proposé une alternative. Dans le cadre de l'action "Save_post 'que j'ai jointe pour mon type de post personnalisé, j'ai ajouté la logique suivante; xxx

Qu'est-ce que cela est contenant une matrice d'identifiant de poste dans la table des options où le la poste est protégée par un mot de passe. Ensuite, dans une requête personnalisée, j'ai simplement transmis ce tableau dans le cadre de l'option post__not_in par exemple xxx

de cette façon, je pourrais exclure les postes protégés d'une archive Page, mais autorisez toujours un utilisateur à atterrir sur la page protégée par mot de passe pour saisir le mot de passe.


1 commentaires

Cela a fonctionné pour moi où la solution "meilleure" ci-dessous ne l'a pas fait. J'utilisais Get_Posts afin que c'était vraiment le moyen le plus simple de faire le travail.



7
votes

J'aime vraiment l'approche de Kevin, mais je l'ai légèrement ajustée:

// Create a new filtering function that will add our where clause to the query
function my_password_post_filter( $where = '' ) {
    // Make sure this only applies to loops / feeds on the frontend
    if (!is_single() && !is_admin()) {
        // exclude password protected
        $where .= " AND post_password = ''";
    }
    return $where;
}
add_filter( 'posts_where', 'my_password_post_filter' );


2 commentaires

Merci, @Peter Chester, j'ai également ajouté cette exclusion pour le message suivant et POST précédent Liens (voir ma réponse).


Une idée de l'application de cela pour passer des messages protégés dans des boucles personnalisées sur un seul?



0
votes

En plus de la réponse de @pter Chester:

Vous pouvez également exclure des messages protégés par mot de passe à partir du message précédent et suivant Publier Liens, si vous avez ceux au bas de votre page postale.

Pour ce faire, vous pouvez ajouter l'exclusion au get_previous_post_where et get_next_post_wheres hameçons. < Pré> xxx


0 commentaires

19
votes

Je viens à cette question où je cherchais la même chose. Cependant, j'ai lu la ligne de documents WP_Query par ligne, puis a trouvé une solution très simple et qui est juste d'ajouter 'has_password' => false argument à la requête $ args

Le code sera aussi ci-dessous ... xxx

Ici, vous pouvez voir que j'ai exclu collant et mot de passe protégé .


2 commentaires

Toutes les réponses suggèrent que l'utilisation de SQL est dangereuse et ne doit pas être utilisée à partir de WordPress 3.9+. Ceci est la manière intégrée d'exclure des postes protégés par mot de passe.


Oui! C'est la façon de le faire.