Pagină negăsită pentru taxonomie în tipul de postare personalizat

23 ian. 2015, 05:26:10
Vizualizări: 20.6K
Voturi: 4

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; ?>
0
Toate răspunsurile la întrebare 4
3
17

Am întâmpinat aceeași problemă pe platforma mea locală cu nginx. După ce am actualizat permalink-urile în setări, totul a funcționat corect. Setări > Legături permanente > Salvare modificări (fără modificare)

16 feb. 2017 14:09:43
Comentarii

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

Braza Braza
21 iul. 2020 13:12:19

Wordpress este atât de prost făcut.

serraosays serraosays
14 oct. 2020 00:41:54

Am încercat asta de mai mult de 10 ori, dar nu funcționează pentru mine. Afișează o pagină negăsită.

questionbank questionbank
4 iul. 2021 19:56:23
1

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');
23 ian. 2015 11:13:42
Comentarii

URL-ul blogului nu funcționează

questionbank questionbank
4 iul. 2021 19:57:03
0

Vă recomand cel puțin două lucruri:

  1. 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)

  2. 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.

23 ian. 2015 06:14:53
5

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.

23 ian. 2015 08:53:03
Comentarii

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?

Jeremy Love Jeremy Love
23 ian. 2015 09:05:27

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

Pieter Goosen Pieter Goosen
23 ian. 2015 09:09:59

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?

Jeremy Love Jeremy Love
23 ian. 2015 10:20:10

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.

Pieter Goosen Pieter Goosen
23 ian. 2015 10:42:36

Mulțumesc, voi continua să caut o soluție și voi reveni aici când voi găsi un răspuns.

Jeremy Love Jeremy Love
23 ian. 2015 10:44:43