web-dev-qa-db-fra.com

wp_list_pages ne fonctionne pas dans le type d'article personnalisé hiérarchique

Je me suis cogné la tête contre mon bureau tout l'après-midi pour essayer de comprendre. J'ai un type de message personnalisé tout configuré, avec hiérarchique défini sur "vrai" et je peux affecter des parents et voir la relation dans le back-end. Qui est genial.

Sauf que je veux lister les enfants (et frères et soeurs) de mon nouveau type de message spécial. J'ai trouvé ce code

<?php if($post->post_parent)
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
else
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
if ($children) { ?>
<ul>
    <?php echo $children; ?>
</ul>
<?php } ?>

qui fonctionne parfaitement lorsque je le mets dans un modèle de page pour les pages. Mais il retourne squat pour le modèle de publication personnalisé. Je pensais que "$ post-> post_parent)" était peut-être le problème - mais ce n'est pas:

 <h1 class="page-title"><a href="<?php echo get_permalink($post->post_parent) ?>" title="<?php printf( __( 'Return to %s', 'your-theme' ), wp_specialchars( get_the_title($post->post_parent), 1 ) ) ?>" rev="attachment"><span class="meta-nav">&laquo; </span><?php echo get_the_title($post->post_parent) ?></a></h1>

(levé d'un modèle de pièce jointe) me donne un lien de retour au parent. - alors peut-être que cela a quelque chose à voir avec wp_list_pages? Peut-être que c'est autre chose? J'apprécierais toutes les idées.

Merci d'avance,

Martin

2
Martin

Comme l'indication de nom, wp_list_pages() est destiné à être utilisé avec des pages. Comme dans "une page de page". Il utilise get_pages() en interne, dont l'argument post_type est défini par défaut sur page.

Je ne suis pas du tout sûr que cela soit supposé fonctionner pour les non-pages, mais vous pouvez essayer de passer votre type d'article personnalisé comme argument post_type.

3
Rarst

J'essaie de faire quelque chose de très similaire. Voici ce que j'ai jusqu'à présent, en utilisant un type de produit personnalisé:

$children = wp_list_pages("sort_column=menu_order&title_li=&child_of=".$post->post_parent."&post_type=productE&echo=0")

cela génère la liste; malheureusement, les liens sont générés sous la forme siteurl.com/parent-product/child-page

ce qui provoque un 404. Faire une vue à partir de l'écran d'édition montre l'URL désirée sous la forme siteurl.com/?product=child-page

J'utilise le plugin More Types , donc définissez la base de permalien du type de message personnalisé sur product, à l'aide de l'onglet Options avancées lors de la modification du type.

Cela a fait le tour pour moi.

1
user2623

Hmm ... Une autre considération lors de l'utilisation de wp_list_pages pour les types de publication personnalisés est de s'assurer que vous enregistrez le type de publication personnalisé avec le 'type de capacité' => 'page' PAS 'de publication' ....

    register_post_type( 'mycpt',
    array(
        'labels' => array(
            'name' => __( 'MyCPTs' ),
            'singular_name' => __( 'MyCPT' )
        ),
    'public' => true,
    'show_ui' => true,
    'show_in_nav_menus' => true,  
        'capability_type' => 'page',
        'menu_position' => 20,  
        'hierarchical' => true,  
        'rewrite' => true,  
        'supports' => array('title','editor','page-attributes')

    )
);
flush_rewrite_rules();
0
user2906