it-swarm.com.de

Permalinks für benutzerdefinierte Post-Typen in benutzerdefinierten Taxonomien wurden nicht gefunden

Ich habe versucht, den Rat von TheDeadMedic in diesem Beitrag anzuwenden, um die folgende URL-Struktur zu erhalten:

example.com/activities = a WP page
example.com/activities/type-term = ein benutzerdefiniertes Archiv
example.com/activities/type-term/activity-post = ein benutzerdefinierter Beitrag

Alle URLs funktionieren bis zur niedrigsten, die einen Wordpress-Fehler "Nicht gefunden" zurückgibt.

Ich weiß nicht, ob ich die Umschreiberegeln filtern muss, damit dies funktioniert. Der Beitrag, den ich oben verlinkt habe, deutet darauf hin, dass ich alles Notwendige getan habe.

Jede Hilfe wäre sehr dankbar, danke. Hier ist mein 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;
}

AKTUALISIEREN

OK, es stellt sich heraus, dass Sie immer Umschreiberegeln hinzufügen müssen, um diesen Prozess abzuschließen. Die URLs werden möglicherweise korrekt angezeigt, aber die Datenbank versteht sie nicht. Dieser Beitrag hat mir enorm geholfen, zusammen mit dieser Referenz Informationen zu Regex.

Ich musste nur den Code hinzufügen

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

Hoffe das hilft jemandem.

2
nigedo

In WordPress gibt es nichts, was den %tax_type% im Rewrite-Slug automatisch ersetzen könnte. Sie müssten einen benutzerdefinierten Code hinzufügen, um dies wie in dieser Antwort zu behandeln. https://stackoverflow.com/questions/7723457/wordpress-custom-type-permalink-containing-taxonomy-slug

1
sanchothefat