Cum să creezi un șablon personalizat pentru o taxonomie personalizată?
Am următorul cod pe care l-am folosit pentru a crea un tip de postare personalizată și o taxonomie personalizată.
În secțiunea de produse am creat categoriile "monitoare" și "consumabile".
Am creat apoi șablonul taxonomy-monitors.php, este denumit corect pentru categoria de monitoare? De asemenea, care este URL-ul pe care trebuie să-l accesez pentru a vedea doar categoria de monitoare folosind acel șablon?
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'products',
array(
'labels' => array(
'name' => __( 'Produse' ),
'singular_name' => __( 'Produs' )
),
'capability_type' => 'post',
'supports' => array('title','editor','comments'),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'produse' ),
)
);
}
function news_init() {
// creează o nouă taxonomie
register_taxonomy(
'products',
'products',
array(
'label' => __( 'Categorii de Produse' ),
'sort' => true,
'hierarchical' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'categorie-produse' )
)
);
}
add_action( 'init', 'news_init' );
ACTUALIZARE
Șabloane
Consultați Ierarhia Șabloanelor pentru o explicație mai detaliată despre cum WordPress alege șablonul.
Pentru un termen de taxonomie slug
('monitoare' în exemplul dumneavoastră) din taxonomia taxonomy
(de ex. 'produse'), WordPress va încerca să utilizeze următoarele șabloane (în această ordine)
taxonomy-{taxonomy}-{slug}.php
taxonomy-{taxonomy}.php
taxonomy.php
archive.php
index.php
Pentru pagina de termen de taxonomie 'monitoare', WordPress va utiliza
taxonomy-produse-monitoare.php
dacă acest fișier există. Dacă nu există, atunci pentru acea taxonomie va reveni la
taxonomy-produse.php
și așa mai departe.
Legături permanente
Următorul URL ar trebui să indice pagina de produse 'monitoare':
www.example.com?produse=monitoare
Ați specificat și o rescriere de URL, deci presupunând că regulile de rescriere au fost actualizate și nu există o conflict, următorul ar trebui să funcționeze de asemenea
www.example.com/categorie-produse/monitoare

Ok, mulțumesc. Acum am un șablon taxonomy-products-monitors.php
, am mers la secțiunea permalinkuri și am dat click pe salvare (asta reîmprospătează cache-ul, nu?) apoi am accesat pagina http://www.neurosignsurgical.com/v2/products-category/monitors
dar încă arată eroare 404. Chiar nu înțeleg de ce!

Da, asta reîmprospătează cache-ul. Ține minte că termenii fără postări vor afișa probabil 'nimic găsit'. Dacă primul link funcționează, atunci e o problemă de permalink. Ar trebui să folosești acest plugin pentru a diagnostica problema. Un șablon nu ar trebui să cauzeze o eroare 404.

Am încercat să adaug produse noi și să le categorizez ca monitoare, primul link a dat eroare 404 și la fel și al doilea. Am încercat plugin-ul (voi actualiza întrebarea cu un screenshot).

Referință: https://stackoverflow.com/questions/33888951/wordpress-custom-post-type-taxonomy-template
<?php
get_header();
do_action('genesis_before_content_sidebar_wrap'); ?>
<div id="content-sidebar-wrap">
<?php do_action('genesis_before_content'); ?>
<div class="wrap">
<main class="content">
<?php
$case_study_cat_slug = get_queried_object()->slug;
$case_study_cat_name = get_queried_object()->name;
?>
<h2><?php echo $case_study_cat_name; ?></h2>
<?php
$al_tax_post_args = array(
'post_type' => 'success_stories', // Numele tipului de postare pe care l-ai înregistrat
'posts_per_page' => 999,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'success_stories_category',
'field' => 'slug',
'terms' => $case_study_cat_slug
)
)
);
$al_tax_post_qry = new WP_Query($al_tax_post_args);
if($al_tax_post_qry->have_posts()) :
while($al_tax_post_qry->have_posts()) :
$al_tax_post_qry->the_post();
echo '<div class="post-excerpt">';
?>
<h2 class="entry-title" itemprop="headline"><a href="<?php the_permalink(); ?>" class="entry-title-link"><?php the_title(); ?></a></h2>
<div class="entry-content"> <?php echo excerpt(35); ?> </div>
</div>
<?php
endwhile;
endif;
?>
</main>
</div>
</div>
<?php
do_action('genesis_after_content_sidebar_wrap');
get_footer();

Pentru aceasta, adăugați următorul cod în fișierul functions.php (aflat în folderul temei):
add_action( 'init', 'create_cw_hierarchical_taxonomy', 0 );
//crează o taxonomie personalizată ierarhică
function create_cw_hierarchical_taxonomy() {
$labels = array(
'name' => _x( 'Subiecte', 'nume general taxonomie' ),
'singular_name' => _x( 'Subiect', 'nume singular taxonomie' ),
'search_items' => __( 'Caută Subiecte' ),
'all_items' => __( 'Toate Subiectele' ),
'parent_item' => __( 'Subiect Părinte' ),
'parent_item_colon' => __( 'Subiect Părinte:' ),
'edit_item' => __( 'Editează Subiect' ),
'update_item' => __( 'Actualizează Subiect' ),
'add_new_item' => __( 'Adaugă Subiect Nou' ),
'new_item_name' => __( 'Nume Subiect Nou' ),
'menu_name' => __( 'Subiecte' ),
);
// înregistrare taxonomie
register_taxonomy('topics',array('post'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'topic' ),
));
}
Am găsit informația aici și aici am aflat cum să creez Taxonomie Non-ierarhică https://www.wpblog.com/create-custom-taxonomies-in-wordpress/
