web-dev-qa-db-fra.com

Obtenir l'identifiant de l'enfant à partir d'une limace d'enfant, tout en connaissant l'identifiant du parent

J'ai besoin d'une hiérarchie pour obtenir des données. C'est l'enfant (par nom de limace) que je dois avoir tout en connaissant déjà les parents.

Highest Known Parent Page (slug : 'parent')
|_ Child 1 (slug : 'child-1')
   |_ Page 1 (slug : 'page-1')
   |_ Page 2 (slug : 'page-2')
|_ Child 2 (slug : 'child-2')
   |_ Page 1 (slug : 'page-1')
   |_ Page 2 (slug : 'page-2')
|_ Child 3 (slug : 'child-3')
   |_ Page 1 (slug : 'page-1')
   |_ Page 2 (slug : 'page-2')

Dans l’idéal, j’essaie d’obtenir un résultat qui renvoie "page-2" de manière cohérente et je travaille déjà dans une boucle où je connais "enfant-1", "enfant-2", "enfant-3", etc. Je ne suis pas sûr de savoir comment interroger le troisième niveau. Des idées?

Je réfléchis probablement à cela, car il existe probablement un moyen facile d'obtenir l'identifiant d'une page à partir d'une limace, lorsque vous connaissez déjà le parent. Bien sûr, je devrais écrire un script pour les imprévus au cas où "page-2" n'existe pas pour une raison quelconque, mais je dois d'abord obtenir les bonnes données.

UPDATE:

Voici le code avec lequel je travaille en ce moment. Je connais des modèles. Je connais des enfants de mannequins. J'essaie de placer chaque enfant d'un certain enfant sous tous les enfants modèles. Par exemple, une page "spécifications". J'espère donc avoir 5 à 6 pages différentes de "spécifications" renvoyées à moi ... afin que je puisse facilement y accéder (de manière dynamique).

<?php
// get models id
$models = get_page_by_path( 'models' );

// get children of models page
$args = array(
    'post_type'      => 'page',
    'posts_per_page' => -1,
    'post_parent'    => $models->ID,
    'order'          => 'ASC',
    'orderby'        => 'menu_order'
);
$children_posts = new WP_Query( $args );
?>
2
Will Ashworth

Vous devez utiliser le paramètre pagename pour WP_Query avec post_parent. Limitez votre requête à une publication en utilisant posts_per_page.

$parent_id = get_the_ID();
$args = array(
    'post_type'      => 'page'
    'pagename'       => 'page-2',
    'post_parent'    => $parent_id,
    'posts_per_page' => 1
);
$posts = get_posts( $args );
$child = isset( $posts[0] ) ? $posts[0] : false;
if( $child ){
    //Do Something
}

Ceci, en théorie, devrait rendre votre message souhaité par slug en utilisant l'ID parent.

1
Brian Fegter
<?php
// get models id
$models = get_page_by_path( 'models' );

// get children of models page
$args = array(
    'post_type'      => 'page',
    'posts_per_page' => -1,
    'post_parent'    => $models->ID,
    'order'          => 'ASC',
    'orderby'        => 'menu_order'
);

$children_posts = new WP_Query( $args );
0
Arman Gharibi

Avez-vous déjà consulté get_page_children ? vous devez passer l'id de la page enfant et les $ children_posts à celle-ci et elle retournera toutes les pages enfants de celle-ci ...

ce dont vous avez besoin est: enfant-1-> ID et un tableau avec enfant-1, enfant-2, etc.

0
alxndrbauer