web-dev-qa-db-fra.com

Page non trouvée taxonomie type de message personnalisé

J'ai créé un type de message personnalisé avec des taxonomies et lorsque je vais sur la page de taxonomie et que je visualise l'une des taxonomies, une page non trouvée comme une erreur, comme la taxonomie n'a pas été créée.

Aucune suggestion?

/*Products*/
$labels = array(
    'name' => _x('Products', 'post type general name'),
    'singular_name' => _x('Product', 'post type singular name'),
    'add_new' => _x('Add New', 'Product'),
    'add_new_item' => __("Add New Product"),
    'edit_item' => __("Edit Product"),
    'new_item' => __("New Product"),
    'view_item' => __("View Product"),
    'search_items' => __("Search Product"),
    'not_found' =>  __('No products found'),
    'not_found_in_trash' => __('No products found in Trash'), 
    'parent_item_colon' => ''
  );

$args = array(
    'labels' => $labels,
        'singular_label' => __('Products'),
        '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 );

// Add to admin_init function
add_filter('manage_edit-products_columns', 'add_new_products_columns');
function add_new_products_columns($columns) {
$columns = array(
    'cb' => '<input type="checkbox" />',
        'images' => 'Images',
    'title' => 'Product Name',
        'author' => 'Author',
        'product-categories' => 'Categories',
        'tags' => 'Tags',
        'date' => 'Date',
); 
    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() 
{
    // Photo Categories
    register_taxonomy('products-cat',array('products'),array(
        'hierarchical' => true,
        'label' => 'Product Categories',
        'singular_name' => 'Products Category',
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'products' )
    ));
}

/*End Products*/

J'ai ceci dans ma page d'archives

archive-products.php

<?php get_header(); ?>

<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post();?>
                <?php the_title(); ?>   
<?php endwhile; endif; ?>
4
Jeremy Love

Après quelques recherches, j'ai trouvé un blog qui avait réellement une réponse à ce problème.

Voici la fonction avec le blog url .

function taxonomy_slug_rewrite($wp_rewrite) {
    $rules = array();
    // get all custom taxonomies
    $taxonomies = get_taxonomies(array('_builtin' => false), 'objects');
    // get all custom post types
    $post_types = get_post_types(array('public' => true, '_builtin' => false), 'objects');

    foreach ($post_types as $post_type) {
        foreach ($taxonomies as $taxonomy) {

            // go through all post types which this taxonomy is assigned to
            foreach ($taxonomy->object_type as $object_type) {

                // check if taxonomy is registered for this custom type
                if ($object_type == $post_type->rewrite['slug']) {

                    // get category objects
                    $terms = get_categories(array('type' => $object_type, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0));

                    // make rules
                    foreach ($terms as $term) {
                        $rules[$object_type . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
                    }
                }
            }
        }
    }
    // merge with global rules
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'taxonomy_slug_rewrite');
2
Jeremy Love

J'ai rencontré le même problème sur ma plate-forme nginx locale. Après avoir mis à jour les permaliens dans les paramètres, tout a bien fonctionné. Paramètres> Permaliens> Enregistrer les modifications (sans modification)

10
Julien Menichini

Je recommanderais au moins deux choses:

  1. Changez la priorité de votre action products_create_taxonomies à au moins 1, sinon 5 ou plus. (Je pense que 0 n'est pas valide pour les priorités d'action pour une raison quelconque)

  2. Ajoutez la création de votre type de message à une action init, exactement comme vous l'avez fait avec une taxonomie plus prioritaire que votre taxonomie (puisque vous les connectez via la taxonomie).

Si ces deux modifications ne vous apportent rien, essayez de les configurer (sans les lier via leurs propres structures), puis appelez le numéro suivant avec une priorité ultérieure (toujours au cours de l'init):

register_taxonomy_for_object_type( 'products-cat', 'products' );

Cela devrait faire en sorte qu'ils soient complètement et correctement reliés.

1
Privateer

Je pense que votre problème principal ici est la réécriture de votre taxonomie . En l'état actuel, votre réécriture de la taxonomie ressemble à ceci

'rewrite' => array('slug' => 'products' )

C’est exactement ce que cette réécriture signifie dans votre type de message personnalisé . Le suivant

'rewrite' => true,

traduit à ceci dans votre type de message personnalisé

'rewrite' => array('slug' => 'products' )

Par défaut, cet affrontement lors des réécritures 404 traitera vos demandes de taxonomie. En guise de solution, vous pouvez modifier votre réécriture pour votre taxonomie ou consulter cet article je l’ai fait récemment sur ce site pour améliorer la solution de contournement.

Important: Rincez vos permaliens après chaque mise à jour de votre code pour les réinitialiser sur votre nouvelle structure.

0
Pieter Goosen