it-swarm.com.de

Kategoriearchiv von benutzerdefinierten Beitragstypen anzeigen

Ich bin leider zu spät zur Party über benutzerdefinierte Post-Typen und habe erst vor kurzem damit begonnen, mich zu entschuldigen, wenn meine Fragen idiotisch erscheinen, aber ich kann keine Antwort auf meine Frage finden.

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen acts mit einigen benutzerdefinierten Feldwerten eingerichtet und (entscheidend) verwende ich Standard Kategorien, um diese Akteure in zu trennen. Männer , Frauen und Kinder Inserate:

'taxonomies' => array('category', 'post_tag')

... da ich dachte, das wäre eine viel sauberere und ordentlichere Art ... die Schauspieler zu kategorisieren. Ich bin jedoch völlig ratlos darüber, wie diese Kategorien in irgendeiner Weise, in irgendeiner Form oder in irgendeiner Form angezeigt werden sollen.

Ich habe eine benutzerdefinierte archive-actors.php-Datei, in der all der Schauspieler angezeigt wird, aber ich möchte sie nach Kategorien filtern können. z.B. zeige nur die men an. Wenn ich jedoch auf eine Standard-URL wie mysite.com/category/actors/men schätze, bekomme ich nur

Es tut uns leid, aber es gibt noch keine Beiträge in der Kategorie Männer.

Das gleiche passiert, wenn ich nur mysite.com/category/men versuche - in keinem Fall wird die Vorlage archive-actors.php verwendet.

Kann mir jemand helfen, meinen Nebel der Dummheit zu beseitigen und mich in die richtige Richtung zu lenken, damit ich diese lästigen Schauspieler herausfiltern kann?

Bearbeiten:

Wie @mrwweb unten anspielt (und ich habe vergessen zu erwähnen, dass ich es versucht habe), kann Folgendes zur functions.php-Datei hinzugefügt werden:

function query_post_type($query) {
    $post_types = get_post_types();

    if ( is_category() || is_tag()) {

        $post_type = get_query_var('actors');

        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = $post_types;
        }

        $query->set('post_type', $post_type);

        return $query;
    }
}

add_filter('pre_get_posts', 'query_post_type');

... wie angegeben hier welches funktioniert funktioniert, sofern es meine kategorisierten benutzerdefinierten Beitragstypen auf der regulären archive.php-Seite anzeigt, aber meinen archive-actors.php nicht verwendet, der der Schlüssel ist.

4
indextwo

Sie können die Verwendung Ihrer Vorlage für Kategorien mit dem Filter category_template erzwingen:

function wpa57439_category_template( $templates = '' ){
    if( !is_array( $templates ) && !empty( $templates ) ) {
        $templates = locate_template( array( 'archive-actors.php', $templates ), false );
    } 
    elseif( empty( $templates ) ) {
        $templates = locate_template( 'archive-actors.php', false );
    }
    else {
        $new_template = locate_template( array( 'archive-actors.php' ) );
        if( !empty( $new_template ) ) array_unshift( $templates, $new_template );
    }
    return $templates;
}
add_filter( 'category_template', 'wpa57439_category_template' );

angepasst von Filterhierarchie im Codex.

4
Milo

Das ist das erwartete Verhalten von Kategoriearchiven. Wie gefunden hier in den Support-Foren sollte das folgende Snippet Ihr Problem beheben (ändern Sie einfach "Artikel" in Ihren Beitragstyp):

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if(is_category() || is_tag()) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('post','articles','nav_menu_item');
    $query->set('post_type',$post_type);
    return $query;
    }
}

UPDATE: Gah. Ich habe den falschen Ausschnitt genommen. Ich wollte diesen verwenden.

0
mrwweb

Alternativ können Sie einfach eine neue wp_rewrite-Regel hinzufügen, um eine neue URL-Struktur zu erstellen, in der nur Posts in einer bestimmten Cpt und Kategorie angezeigt werden. Sowas wie die .Gist habe ich hier gepostet:

[edit: kann keine .gists einbetten, hier ist der Code und linky ]

/**
* This could be extrapolated and used for tags or any other taxonomy really.
*/

add_action('init', 'category_cpt_rewrites');

function category_cpt_rewrites() {
    $custom_post_types = array('video', 'audio', 'photo', 'file'); //some example post types
    foreach ( $custom_post_types as $post_type ) {
        $rule = '^' . $post_type . '/category/(.+?)/?$';
        $rewrite = 'index.php?post_type=' . $post_type . '&category_name=$matches[1]';
        add_rewrite_rule($rule,$rewrite,'top');
    }
}

//make sure you flush rules
//this will take the following url structure (video cpt as an example, and politics as a category example) -> video/category/politics and return posts belonging to the politics category that are in the "video" custom post type.

//note that if you want this to be truly effective you'll want to make a custom "the_category()" or similar template function to return the correct url structure for a category list belonging to a custom post type post.
0
Darren