web-dev-qa-db-fra.com

Pourquoi Wordpress utilise-t-il "pièce jointe" dans la chaîne de requête d'un type de publication personnalisé?

Pourquoi Wordpress utilise-t-il "pièce jointe" dans la chaîne de requête d'un type de publication personnalisé?

Bien que ma structure soit légèrement contournée, je ne peux pas sembler savoir où "l'attachement" entre en jeu et comment changer ce comportement.

Mon type de message personnalisé 'fb_entry' a la taxonomie personnalisée 'problème'. Les messages de 'fb_entry' sont réécrits avec le slug 'journal /% numéro%', où% numéro% est le nom du terme. J'ai aussi un deuxième type de message personnalisé appelé 'fb_issue' dont les messages sont réécrits avec le slug 'journal'. Il y a aussi une page avec le slug 'journal'.

Voici comment cela est censé fonctionner:

  1. Visites d'utilisateurs/journal
  2. L'utilisateur navigue dans la liste des publications de fb_issue et effectue sa sélection
  3. L'utilisateur est amené à/journal/fb_issue
  4. Ici, l'utilisateur navigue dans la liste des publications de fb_entry avec les termes 'numéro' qui correspondent à la lettre fb_issue
  5. L'utilisateur fait la sélection et les vues choisies après fb_entry
  6. Idéalement, l'utilisateur a l'URL/journal/nom-terme-problème/fb_entry-post-name

Tout cela semble bien fonctionner jusqu'à la dernière étape au cours de laquelle l'utilisateur atteint 404 pages. La barre d’outils de débogage me dit que la demande est:

  • / journal/issue-terme-nom/fb_entry-post-name

Mais la chaîne de requête est:

  • pièce jointe = fb_entry-post-name

Cependant, aucune de mes requêtes n'appelle des pièces jointes.

MODIFIER

Voici l'enregistrement du type de post. Standard, je pense:

Normalement, je pense:

/* Create the 'Entry' post type */
function create_fb_entry(){
    register_post_type( 'fb_entry',
        array(
            'labels' => array(
                'name' => 'Entries',
                'singular_name' => 'Entry',
                'add_new' => 'Add New Entry',
                'add_new_item' => 'Add New Entry',
                'edit_item' => 'Edit Entry',
                'new_item' => 'New Entry'
            ),
            'public' => true,
            'rewrite' => array(
                'slug' => 'journal/%issue%',
                'with_front'  => false,
            ),
            'supports' => array(
                'title',
                'editor',
                'excerpt',
                'page-attributes',
                'revisions',
                'thumbnail'
            )
        )
    );
}
add_action('init', 'create_fb_entry');

function create_fb_entry_issue() { /* Create the 'Issue' taxonomy */
    $labels = array(
        'name' => _x( 'Issue', 'issue' ),
        'singular_name' => _x( 'Issue', 'issue' ),
        'search_items' =>  __( 'Search Issues' ),
        'all_items' => __( 'All Issues' ),
        'parent_item' => __( 'Parent Issue' ),
        'parent_item_colon' => __( 'Parent Issue:' ),
        'edit_item' => __( 'Edit Issue' ),
        'update_item' => __( 'Update Issue' ),
        'add_new_item' => __( 'Add New Issue' ),
        'new_item_name' => __( 'New Issue' )
    );  

    register_taxonomy( 'issue',
        array( 'fb_entry' ),
            array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array( 
                'slug' => 'issue',
                'with_front'  => false
            )
        )
    );
}
add_action( 'init', 'create_fb_entry_issue', 0 );

EDIT 2

Pour plus de clarté, voici le code que j'utilise pour réécrire% issue%:

function fb_issue_permalink($permalink, $post_id, $leavename) {//   Fix dynamic 'issue'/'fb_entry' slug in 'fb_entry' permalink
    if (strpos($permalink, '%issue%') === FALSE) return $permalink;

        // Get post
        $post = get_post( $post_id );
        if( ! $post ) return $permalink;

        // Get taxonomy terms
        $terms = wp_get_object_terms( $post->ID, 'issue' );
        if( ! is_wp_error( $terms ) && ! empty( $terms ) && is_object( $terms[0] ) ) $taxonomy_slug = $terms[0]->slug;

        else $taxonomy_slug = 'unpublished'; // Substitute 'journal issue' in slug if 'journal entry' is not categorized

        return str_replace('%issue%', $taxonomy_slug, $permalink);
}
add_filter('post_link', 'fb_issue_permalink', 10, 3);
add_filter('post_type_link','fb_issue_permalink', 10, 3);
5
bode well carapace

J'ai pu résoudre ce problème et définir l'ordre des règles de réécriture à l'aide de cette classe: http://hmn.md/says/2012/11/08/wordpress-rewrite-rules-hm-core-style/

0
bode well carapace