web-dev-qa-db-fra.com

Balise conditionnelle dans la logique du widget pour vérifier si la page de premier niveau ou la sous-page

J'utilise le plugin Widget Logic pour afficher des widgets sur certaines pages à l'aide de balises conditionnelles Wordpress (ou de tout code général PHP).

Ce que je voudrais faire, c'est afficher uniquement un widget sur les pages enfants, pas les pages de niveau supérieur. J'ai essayé les deux opérations suivantes, mais elles renvoient toutes les deux la valeur true sur toutes les pages (le widget s'affiche donc sur toutes les pages):

global $post; return ($post->post_parent != 0);

et

global $post; return ( is_page() && $post->post_parent );

Remarque J'ai essayé ceci pour les tests et le widget s'affiche à la page 61 et ses enfants, et pas seulement sur ses enfants comme je m'y attendais:

global $post; return ($post->post_parent=="61");

Des conseils?

Merci!

1
Caroline Elisa

Toutes mes excuses, c’est un problème lié à mon thème: utiliser get_posts pour répertorier les pages enfants en dehors de la boucle sans wp_reset_postdata. Donc, un conflit global $post; je suppose.

global $post; return ($post->post_parent != 0); fonctionne bien.

0
Caroline Elisa

Vous pouvez trouver la réponse sur la page du plugin sur wordpress.org. Sélectionnez l'onglet 'Autres notes'. Vous le trouverez dans la liste des exemples:

global $post;

// WP page that is a child of page 77
return in_array(77, get_post_ancestors($post)); 

Modifier: Comme alternative à vos suggestions, vous pouvez essayer

global $post;
return !empty(get_post_ancestors($post)); 

Cet appel est coûteux et devrait plutôt être utilisé uniquement à des fins de test. Mais je soupçonne que quelque chose ne va pas avec votre hiérarchie de page. Est-il possible que votre page de niveau supérieur ne se trouve pas au niveau racine?

0
jot