Pagină negăsită pentru taxonomie în tipul de postare personalizat
Am creat un tip de postare personalizat cu taxonomii și când accesez pagina taxonomiei și vizualizez una dintre taxonomii primesc o eroare de pagină negăsită, ca și cum taxonomia nu ar fi fost creată.
Aveți sugestii?
/*Produse*/
$labels = array(
'name' => _x('Produse', 'nume general tip postare'),
'singular_name' => _x('Produs', 'nume singular tip postare'),
'add_new' => _x('Adaugă Nou', 'Produs'),
'add_new_item' => __("Adaugă Produs Nou"),
'edit_item' => __("Editează Produs"),
'new_item' => __("Produs Nou"),
'view_item' => __("Vizualizează Produs"),
'search_items' => __("Caută Produs"),
'not_found' => __('Nu s-au găsit produse'),
'not_found_in_trash' => __('Nu s-au găsit produse în Coș'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'singular_label' => __('Produse'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => true,
'query_var' => 'products',
'taxonomies' => array('products-cat'),
'supports' => array('title', 'editor', 'custom-fields', 'thumbnail', 'excerpt'),
'has_archive' => true,
);
register_post_type( 'products' , $args );
// Adăugare la funcția admin_init
add_filter('manage_edit-products_columns', 'add_new_products_columns');
function add_new_products_columns($columns) {
$columns = array(
'cb' => '<input type="checkbox" />',
'images' => 'Imagini',
'title' => 'Nume Produs',
'author' => 'Autor',
'product-categories' => 'Categorii',
'tags' => 'Etichete',
'date' => 'Data',
);
return $columns;
}
add_action('manage_products_posts_custom_column', 'manage_products_columns', 10, 2);
function manage_products_columns($column_name, $id) {
global $wpdb;
switch ($column_name) {
case 'images':
//echo get_the_post_thumbnail( $page->ID, array(50,50) );
break;
case 'product-categories':
echo get_the_term_list($post->ID, 'products-cat', '', ', ','');
break;
default:
break;
}
}
add_action( 'init', 'products_create_taxonomies', 0 );
function products_create_taxonomies()
{
// Categorii Foto
register_taxonomy('products-cat',array('products'),array(
'hierarchical' => true,
'label' => 'Categorii Produse',
'singular_name' => 'Categorie Produse',
'show_ui' => true,
'query_var' => true,
'rewrite' => array('slug' => 'products' )
));
}
/*Sfârșit Produse*/
Am acest cod în pagina mea de arhive
archive-products.php
<?php get_header(); ?>
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post();?>
<?php the_title(); ?>
<?php endwhile; endif; ?>

Încearcă această soluție sugerată înainte să faci orice altceva. Practic, funcționează pentru mine de fiecare dată.

După ceva cercetare, am găsit un blog care avea de fapt un răspuns la această problemă.
Iată funcția împreună cu URL-ul blogului.
function taxonomy_slug_rewrite($wp_rewrite) {
$rules = array();
// obține toate taxonomiile personalizate
$taxonomies = get_taxonomies(array('_builtin' => false), 'objects');
// obține toate tipurile de postare personalizate
$post_types = get_post_types(array('public' => true, '_builtin' => false), 'objects');
foreach ($post_types as $post_type) {
foreach ($taxonomies as $taxonomy) {
// parcurge toate tipurile de postare cărora le este asociată această taxonomie
foreach ($taxonomy->object_type as $object_type) {
// verifică dacă taxonomia este înregistrată pentru acest tip personalizat
if ($object_type == $post_type->rewrite['slug']) {
// obține obiectele de categorie
$terms = get_categories(array('type' => $object_type, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0));
// creează reguli
foreach ($terms as $term) {
$rules[$object_type . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
}
}
}
}
}
// combină cu regulile globale
$wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'taxonomy_slug_rewrite');

Vă recomand cel puțin două lucruri:
Modificați prioritatea pentru acțiunea
products_create_taxonomies
la minimum 1, dacă nu 5 sau mai mare. (Cred că 0 nu este valid pentru prioritățile acțiunilor din anumite motive)Adăugați crearea tipului de post într-o acțiune init, la fel cum ați făcut pentru taxonomii, dar la o prioritate mai mică decât cea a taxonomiei (deoarece le conectați prin intermediul taxonomiei).
Dacă aceste două modificări nu rezolvă problema, încercați să configurați ambele (fără a le lega prin structurile lor proprii) și apoi apelați următoarele la o prioritate ulterioară (tot în timpul init):
register_taxonomy_for_object_type( 'products-cat', 'products' );
Aceasta ar trebui să vă asigure că sunt complet și corect legate.

Cred că principala ta problemă aici este rescrierea pentru taxonomia ta. În stadiul actual, rescrierea pentru taxonomie arată astfel:
'rewrite' => array('slug' => 'products' )
Acesta este exact ceea ce înseamnă această rescriere în tipul tău personalizat de postare. Următoarea linie:
'rewrite' => true,
se traduce în felul următor în tipul tău personalizat de postare:
'rewrite' => array('slug' => 'products' )
În mod implicit, această suprapunere în rescrieri va duce la eroarea 404 pentru cererile către taxonomie. Ca soluție, poți modifica rescrierea pentru taxonomia ta, sau poți consulta acest articol pe care l-am publicat recent pe acest site, cu o soluție mai bună pentru această problemă.
Important: După fiecare actualizare în cod, resetează legăturile permanente (permalinks) pentru a le actualiza conform noii structuri.

asta a rezolvat problema, dar numele slug-ului s-a schimbat la taxonomia înregistrată care este products-cat. Cum pot păstra rewrite-ul pe true în timp ce slug-ul rămâne products?

Ai verificat postarea legată? Același rewrite slug atât pentru custom post types cât și pentru custom taxonomii este întotdeauna o problemă de funcționare. Dacă îmi amintesc corect, utilizatorul care a postat întrebarea la care am răspuns a făcut o postare exact despre aceeași problemă. Doar verifică și printre postările lui

Ok, am verificat postarea pe care ai recomandat-o și am schimbat de la linii de despărțire la underscore-uri și am descărcat plugin-ul pentru permalinkuri. După aceste modificări, am realizat că schimbarea rewrite-ului din codul meu la true nu este același lucru. Când îl setez pe true, face ca URL-ul să fie același cu numele taxonomiei înregistrate. URL-ul afișează și numele custom post type-ului și numele taxonomiei înregistrate, de exemplu products/products-cat/automotive/. Aveți sugestii?

Sincer să fiu, până aici te pot ajuta, din păcate. Sincer, când vine vorba de rescrieri, suntem în aceeași barcă :-). Știu că este posibil să ai aceleași URL-uri pentru paginile de taxonomie și arhivele tipurilor personalizate de postări cu reguli suplimentare de rescriere. Cred că cu o regulă personalizată de rescriere, poți elimina numele taxonomiei din structura URL-ului din comentariul anterior pe care l-ai postat. Din păcate, nu am investigat eu însumi cum să fac ceva de genul acesta. Sper să reușești să rezolvi, iar dacă o faci, te rog postează soluția și acceptă propriul răspuns. Va fi foarte util pentru utilizatorii viitori.
