web-dev-qa-db-fra.com

Type de publication personnalisé get_post_type_archive_link ($ post_type) renvoie false

Les liens permanents fonctionnent (enfin) pour des publications individuelles du type yoga-event personnalisé que j'ai créé.

Et archiver fonctionne sans réécriture d'URL:

http://website.localhost/?post_type=yoga-event

Cependant, get_post_type_archive_link( 'yoga-event' ) renvoie false.

C'est le tableau que j'envoie à register_post_type:

Array
(
        [labels] => Array
                (
                        [name] => Yoga Events
                        [singular_name] => Yoga Event
                        [menu_name] => Yoga Events
                        [all_items] => Yoga Events
                        [add_new] => Add New
                        [add_new_item] => Add New Yoga Event
                        [edit_item] => Edit Yoga Event
                        [new_item] => New Yoga Event
                        [view_item] => View Yoga Event
                        [search_items] => Search Yoga Events
                        [not_found] => No Yoga Events found
                        [not_found_in_trash] => No Yoga Events found in Trash
                        [parent_item_colon] => Parent Yoga Event:
                )

        [public] => 1
        [rewrite] => Array
                (
                        [slug] => yoga-event
                )

        [has_arhchive] => 1
        [menu_icon] => dashicons-book-alt
)

Je peux en quelque sorte créer ma propre "archive" comme ceci:

$type = 'yoga-event';
$args=array(
    'post_type' => $type,
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'ignore_sticky_posts'=> 1);

$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : 
    $my_query->the_post(); 
    ?>

        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?> </a></p>

    <?php

    endwhile;
} // list of yoga-event items

Mais je suppose que le tableau que register_post_type est en train de recevoir présente une sorte de mauvaise configuration.

Des idées?

PS:

//List Post Types
foreach ( get_post_types( '', 'names' ) as $post_type ) {
     echo '<p>' . $post_type . '</p>';
}

Retourne yoga-event (entre autres).

2
MikeiLL

Puis-je voir votre ligne register_post_type? Ceux-ci sont généralement comme: register_post_type( 'some-post-type', $args );.

Dans cet exemple, some-post-type correspond à l'ID que vous utilisez dans get_post_type_archive_link( 'some-post-type' ), et non à la clé de réécriture yoga-event.

1
frogg3862

Il y avait une faute de frappe dans le code ci-dessus, ce qu'une partie de la communauté a signalé, mais j'ajouterai ici que la dernière pièce du puzzle pour moi était ce petit bout de code ( également basé sur SO ) par lequel nous pouvons examiner un CPT tel que WP le comprend (affiche):

$type = 'yoga-event';
//let's look at our CPT:    
$type_obj = get_post_type_object($type);
mz_pr($type_obj);

function mz_pr($message) {
    echo "<pre>";
    print_r($message);
    echo "</pre>";

De plus, cette classe merveilleuse CPT est un excellent moyen de générer le CPT. (Notez que j'ajoute actuellement le tableau 'has_archive' => True`` to theregister_post_types` manuellement, car la méthode pour l'ajouter via une "méthode d'instance" ne semblait pas fonctionner.)

0
MikeiLL