Voici mon code
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page','post_parent'=>$parid,'orderby'=>'title','order'=>'ASC' ));
Il affiche uniquement les sous-pages de premier niveau. J'ai besoin de toute la sous-page, de la sous-page de sub ... et tout. J'ai cherché une solution et je peux obtenir toutes les sous-pages en utilisant get_pages et wp_list_pages.
Mais j'ai vraiment besoin de trier la commande par valeur méta de poste personnalisée. Je dois donc utiliser une requête personnalisée.
veuillez aider. Merci
wp-query
query-posts
query
phpuser
la source
la source
Réponses:
Pourquoi ne pas simplement utiliser
get_pages()
?par exemple
Mais s'il doit vraiment être un
WP_Query()
objet, utilisez une méthode similaire:la source
WP_Query()
?Le problème
Ce que vous rencontrez des problèmes à saisir est "Comment faire X?" Ce n'est pas une action en une étape, c'est un processus en plusieurs étapes, et il doit être séparé.
Vous n'avez pas besoin de faire ceci:
Vous devez faire ceci:
La solution générale
Donc, pour comprendre comment le faire à l'infini jusqu'à la fin, sans le coder en dur, vous devez comprendre les fonctions récursives.
par exemple
Application de la récursivité à ce problème pour une solution
Donc, votre parent est
$parid
, et votre méta-message a une clé de$metakey
.Permet de le passer dans une fonction pour saisir ses enfants.
Ensuite, nous trierons le tableau $ children, les clés seront les ID de publication et les valeurs seront les méta-valeurs.
et permet de définir la fonction comme:
Cela vous donne un tableau d'ID et de valeurs de publication, classés du plus bas au plus élevé. Vous pouvez utiliser d'autres fonctions de tri PHP pour le faire du plus élevé au plus bas.
Qu'en est-il maintenant des enfants pour enfants?
Au milieu de notre boucle, nous devons effectuer un appel récursif, en passant l'enfant plutôt que l'ID parent.
Donc ça:
Devient ceci:
Avec cette modification, la fonction récupère maintenant les enfants, les enfants enfants, les enfants enfants enfants ..... etc
À la fin, vous pouvez couper les valeurs du tableau pour obtenir des ID comme celui-ci:
En utilisant cette stratégie, vous pouvez remplacer la valeur de la méta-clé par toute autre métrique ou utiliser les fonctions récursives de différentes manières.
Étant donné que le code complet ne nécessite que quelques secondes de compréhension de base et un copier-coller rapide, je ne vais pas insulter votre intelligence avec un bloc de code copier-coller complet.
Les avantages
Problèmes que vous rencontrerez
Ma recommandation
Je vous recommande soit d'aplatir votre hiérarchie de pages, soit d'utiliser une taxonomie à la place. Par exemple, si vous évaluez des publications, ayez une taxonomie de classification des pages avec les termes 1, 2, 3, 4 et 5, etc. Cela vous fournira une liste de publications prête à l'emploi.
Vous pouvez également utiliser les menus de navigation et contourner complètement ce problème
la source
Récupère récursivement toutes les sous-pages actuelles
Voici une approche récursive utilisant
get_children
. Mettez ce qui suit dans votrefunctions.php
:Comment l'utiliser
Utilisez la fonction ci-dessus où vous le souhaitez, par exemple comme ceci:
La fonction prend en charge un
args
paramètre (chaîne ou tableau de requête) et unoutput
type (voir ci-dessus).Vous pouvez donc également l'utiliser comme ceci:
Et en raison de la dépendance
get_children
=>get_posts
=>WP_Query
vous pouvez utiliser des méta-valeurs, comme initialement demandé par l'auteur de cette question.la source
Je ne sais pas si c'est exactement ce que vous recherchez, mais vous pouvez utiliser la fonction wp_list_pages et utiliser les paramètres 'child_of' et 'depth'.
Voir la page suivante sur le Codex pour plus d'informations: http://codex.wordpress.org/Function_Reference/wp_list_pages
la source
J'ai créé une fonction récursive qui récupère tous les identifiants enfants d'une page parent. Une fois que nous avons les identifiants, nous faisons une requête pour les pages et pouvons ordonner les résultats par méta clé / valeur.
Si vous devez trier les enfants par méta clé / valeur de manière hiérarchique, vous devez transmettre les valeurs meta_key et order_by à WP_Query dans la fonction _get_children_ids (au lieu de WP_Query final).
Sinon, une méthode plus simple pour obtenir tous les identifiants enfants est:
la source
JE FAIS CE TRAVAIL, COPIEZ JUSTE LE CODE SUR VOTRE FICHIER PAGE.PHP
la source
$post -> ID
?), B) pas ce qui a été demandé, C) pas très bien expliqué.