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. P>
5 Réponses :
Avez-vous consulté le Argument post_status de wp_query?
"Protégé" semble être un bon candidat à exclure. P>
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 code> 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 () code> 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.
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; 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 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. p> p> post__not_in code> par exemple p>
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.
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' );
Merci, @Peter Chester, j'ai également ajouté cette exclusion pour le message suivant code> et
POST précédent code> 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?
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 code> et Pour ce faire, vous pouvez ajouter l'exclusion au suivant Publier code> Liens, si vous avez ceux au bas de votre page postale. p>
get_previous_post_where code> et
get_next_post_wheres code> hameçons. P> < Pré> xxx pré> p>
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 Le code sera aussi ci-dessous ... p> Ici, vous pouvez voir que j'ai exclu 'has_password' => false code> argument à la requête
$ args code>
collant code> et
mot de passe protégé code> . p> p>
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.
Puisque WordPress 3.9 Il existe également un
has_password CODE> Query Arg que vous pouvez utiliser.