web-dev-qa-db-fra.com

Permaliens pour les post-types personnalisés dans les taxonomies personnalisées non trouvés

J'ai essayé d'appliquer les conseils offerts par TheDeadMedic dans cet article pour obtenir la structure d'URL suivante:

example.com/activities = a WP page
example.com/activities/type-term = une archive personnalisée
example.com/activities/type-term/activity-post = un message personnalisé

Toutes les URL fonctionnent jusqu'au dernier numéro qui renvoie une erreur "introuvable" de Wordpress.

Je ne sais pas si j'ai besoin de filtrer les règles de réécriture pour que cela fonctionne. Le message que j'ai lié ci-dessus suggère que j'ai fait tout ce qui était nécessaire.

Toute aide serait grandement appréciée, merci. Voici mon code:

/*
 * Register custom content objects on initiation
 */
add_action('init', 'register_type'); // Type taxonomy (activities)
add_action('init', 'register_activity'); // Activity post-type
add_filter('post_type_link', 'filter_activity_link', 10, 2); // Filter permalinks for activity post-type

/*
 * Register Type custom taxonomy for activities
 */
function register_type() {

    $labels = array(
        'name'                  => ('Types'),
        'singular_name'         => ('Type'),
        'add_new'               => ('Add New Type'),
        'add_new_item'          => ('Add New Type'),
        'edit_item'             => ('Edit Type'),
        'new_item'              => ('New Type'),
        'view_item'             => ('View Type'),
        'search_items'          => ('Search Type'),
    );

    $args = array(
        'labels'                => $labels,
        'public'                => true,
        'query_var'             => true,
        'rewrite'               => array( 'slug' => 'activities', 'with_front' => false ),

    );
    register_taxonomy( 'type', 'activity', $args );
}

/*
 * Register Activity custom post-type
 */
function register_activity() {

    $labels = array(
        'name'                  => ('Activities'),
        'singular_name'         => ('Activity'),
        'all_items'             => ('All Activities'),
        'add_new_item'          => ('Add New Activity'),
        'edit_item'             => ('Edit Activity'),
        'new_item'              => ('New Activity'),
        'view_item'             => ('View Activity'),
        'search_items'          => ('Search Activities')
    );

    $args = array(
        'labels'                => $labels,
        'public'                => true,
        'show_in_nav_menus'     => false, // Do not appear directly in navigation
        'menu_position'         => 5,
        'hierarchical'          => false,
        'query_var'             => true,
        'supports'              => array( 'title', 'editor', 'type', 'revisions', 'comments' ),
        'rewrite'               => array( 'slug' => 'activities/%tax_type%', 'with_front' => false )
    );

    register_post_type( 'activity', $args );
}

/*
 * Update Type rewrite slug with applicable terms
 */
function filter_activity_link($link, $post) {
    if ($post->post_type != 'activity')
    return $link;

if ($cats = get_the_terms($post->ID, 'type'))
    $link = str_replace('%tax_type%', array_pop($cats)->slug, $link);
return $link;
}

METTRE À JOUR

OK, il s'avère que vous aurez toujours besoin d'ajouter des règles de réécriture pour terminer ce processus. Les URL peuvent apparaître correctement mais la base de données ne les comprend pas. Ce post m'a aidé énormément, avec cette référence informations sur regex.

J'ai juste besoin d'ajouter le code

add_rewrite_rule('^activities/([^/]*)/([^/]*)/?$' ,'index.php?activity=$matches[2]','top';

J'espère que ça aide quelqu'un.

2
nigedo

Il n'y a rien dans wordpress qui remplace automatiquement %tax_type% dans le slug de réécriture. Vous devez ajouter du code personnalisé pour le traiter comme dans cette réponse https://stackoverflow.com/questions/7723457/wordpress-custom-type-permalink-containing-taxonomy-slug

1
sanchothefat