Jsem strašně pozdě na večírku na vlastní typy příspěvků a začal je používat teprve nedávno, takže se omlouvám, pokud se mé otázky zdají být hloupé, ale nemohu najít odpověď na svou otázku.
Nastavil jsem vlastní typ příspěvku nazvaný herci s několika vlastními hodnotami pole a (zásadně) používám kategorie standard k oddělení těchto herců do muži , ženy a děti výpisy:
'taxonomies' => array('category', 'post_tag')
... protože jsem si myslel, že to bude mnohem čistší a čistší způsob, jak roztřídit herce. Nicméně, jsem naprosto narazil na to, jak skutečně zobrazit tyto kategorie v žádném případě, tvaru nebo formě.
Mám vlastní soubor archive-actors.php
, který zobrazuje všechny herců, ale chci mít možnost filtrovat je podle kategorie; např. zobrazit pouze muži . Nicméně pokud myslím, že na standardní URL, jako je mysite.com/category/actors/men
jsem jen dostat
Je nám líto, ale v kategorii Muži zatím nejsou žádné příspěvky.
Totéž se stane, když zkusím mysite.com/category/men
- ani v jednom případě to není pomocí šablony archive-actors.php
.
Může někdo pomoct odstranit mou mlhu temně smýšlejícího a nasměrovat mě správným směrem, abych mohl odfiltrovat tyto otravné herce?
Upravit:
Jak @mrwweb uvádí níže (a já jsem zapomněl zmínit, že jsem se pokusil), do souboru functions.php
lze přidat následující:
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');
... jak je odkazováno zde které dělá práce, pokud bude zobrazovat mé kategorizované typy vlastních příspěvků na běžné stránce archive.php
, ale nevyužívá mé archive-actors.php
, které je klíčové.
Využití šablony můžete vynutit pro kategorie s filtrem category_template
:
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' );
přizpůsobené z Hierarchie filtrů v codex.
To je očekávané chování archivů kategorií. Jak bylo nalezeno zde na fórech podpory by měl následující úryvek vyřešit váš problém (stačí změnit článek na typ příspěvku):
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. Popadl jsem špatný úryvek. Chtěl jsem použít tento.
Případně můžete jen přidat nové pravidlo wp_rewrite, abyste vytvořili novou strukturu url pro zobrazení pouze příspěvků v dané cpt a kategorii. Něco jako .Gist, který jsem zde zveřejnil:
[upravit: nelze vložit .gists tak tady je kód a 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.