web-dev-qa-db-fra.com

Les URL de page parent et miettes de pain pour les types de publication personnalisés ne fonctionnent pas

Ce que j'ai configuré

J'ai trois types de messages personnalisés: ils sont nommés "marques", "carrières" et "actualités".
J'ai trois modèles de page, nommés "page-marques", "page-carrières" et "page-actualités".
Les pages que j'ai créées à l'aide de ces modèles exécutent une requête pour les publications personnalisées portant le même nom (c'est-à-dire que ma page "Actualités" répertorie toutes les publications personnalisées "nouvelles").

Les slugs pour mes types de messages personnalisés sont les "marques", "carrières" et "nouvelles".

Les URL de mes pages sont:

www.example.com/our-brands/
www.example.com/our-careers/
www.example.com/our-news/

J'ai donné ces pages aux pages parce que je sais que les pages elles-mêmes ne peuvent pas avoir la même taille que le type de publication personnalisé. Dans le cas contraire, WordPress deviendrait confus et commencerait à donner des erreurs 404.

Mon problème

Les permaliens de mes pages fonctionnent et les permaliens de mes publications personnalisées fonctionnent, mais je ne parviens pas à obtenir le fil d'ariane correspondant à l'URL de la page parent appropriée.

Par exemple: si vous visitiez www.example.com/our-news/ et que vous cliquez sur un article "Actualités" qui y est répertorié, l’URL résultante serait www.example.com/news/example-news-custom-post/.
Pour cette raison, ma chapelure apparaît comme "Accueil" Nouvelles "Exemple de nouvelles Custom Post". Si quelqu'un souhaitait utiliser les chemins de navigation pour revenir en arrière et cliquait sur le lien "Actualités", il obtiendrait une erreur 404 car www.example.com/news/ n'existe pas.

Ce que j'ai essayé

J'ai essayé d'y remédier en modifiant l'argument de réécriture (disponible lors de l'enregistrement de types d'articles) afin que le slug de réécriture corresponde à l'url de la page que j'ai créée.

'rewrite'             => array( 
                'slug'       => 'our-news',
                'with_front' => true,
                'pages'      => true,
                'feeds'      => true,
),

Bien sûr, cela n'a pas fonctionné, car WordPress est maintenant confus et ma page "Actualités" commence à donner une erreur 404.

La prochaine chose que j'ai essayée était de créer une méta-boîte pour donner à mes types de publications personnalisées une page parent, en utilisant l'ID des pages que j'ai créées pour les désigner en tant que parent de la publication personnalisée.

function rmm_add_meta_box() {

    $screens = array( 'brands', 'news' , 'careers');    

    foreach ( $screens as $screen ) {

        add_meta_box(
            'custom_post_parent',
            'Enter Post Parent ID',
            'rmm_add_meta_callback',
            $screen,
            'side'
        );
    }
}
add_action( 'add_meta_boxes' , 'rmm_add_meta_box' );

function rmm_add_meta_callback( $post ) {
    wp_nonce_field( basename( __FILE__ ), 'rmm_meta_nonce');

    $custom_post_id  = get_post_custom($post->ID);
    $parent_id       = $custom_post_id['parent_id'][0];
    $rmm_stored_meta = get_post_meta( $custom_post_id );

    ?>
    <input type="text" id="parent_id" name="parent_id" value="<?php if ( ! empty( $rmm_stored_meta['parent_id'] ) ) echo esc_attr( $rmm_stored_meta['parent_id'][0] ) ; ?>" />
    <?php
}

function rmm_meta_save( $post ){

    $is_autosave    = wp_is_post_autosave( $post_id );
    $is_revision    = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ 'rmm_meta_nonce' ] ) && wp_verify_nonce( $_POST[ 'rmm_meta_nonce' ], basename( __FILE__) ) ) ? 'true' : 'false';

    if ( $is_autosave || $is_revision || !$is_valid_nonce){

        return;
    }

    $data = sanitize_text_field( $_POST['parent_id'] );

    if ( isset( $_POST['parent_id'] ) ) {

        update_post_meta($post_id, 'parent_id', $data);
    }
}
add_action( 'save_post', 'rmm_meta_save');

Cela a eu pour conséquence que la limace "nos nouvelles" vient d'être collée sur la limace "nouvelles". En d'autres termes: www.example.com/news/example-news-custom-post/ est simplement devenu www.example.com/our-news/news/example-news-custom-post/, avec mes chapelures vous dirigeant vers une page parent avec l'URL www.example.com/our-news/news/ (qui, bien sûr, n'existe pas).

J'aimerais savoir comment je peux obtenir que l'URL de ma page parent soit www.example.com/our-news/ avec mon URL personnalisée en tant que www.example.com/our-news/example-news-custom-post, afin que mon fil d'Ariane cesse de me diriger vers des URL de pages inexistantes.

1
Codette

D'accord, j'y réfléchissais à fond, car il ne m'est pas venu à l'esprit que WordPress générait automatiquement des pages d'archive pour les types de publication personnalisés si vous définissez "has archive" sur "true" lorsque vous enregistrez des types de publication.

Quel travail fatigué

J'ai créé des modèles archive-{slug}.php personnalisés dans mes fichiers de thème pour les types d'articles personnalisés "marques", "carrières" et "actualités" que j'avais enregistrés. Une fois cela fait, j'ai téléchargé mon thème et ajouté le lien permanent (que WordPress génère automatiquement pour chaque page d'archive) dans mon menu de navigation via l'option de lien personnalisé. Cela a abouti à une page avec l'URL correcte www.example.com/news/, aux publications avec l'URL correcte www.example.com/news/example-news-custom-post et aux chapelures qui indiquent "Actualités" avant le titre de l'annonce, avec l'URL correcte.

0
Codette