Question

Cela me rend dingue et je suis sûr qu'il est simple, mais rien que je cherche arrive avec une structure simple (tout est très complexe).

J'ai un type poste personnalisé product_listing et une taxonomie personnalisée de product_cat (qui est hiérarchique et devrait être comme avoir des catégories).

Je veux simplement mes URL pour ressembler à ceci:

mysite.com/products/category1/product-name1 
mysite.com/products/category2/product-name2

Mais pour la vie de moi, peu importe ce que je fais, je suis en train de la question 404 redoutée. Pages fonctionnent bien et les messages fonctionnent bien, mais mes messages personnalisés ne fonctionnent pas correctement. Ils apparaître comme:

mysite.com/products/product-name1
mysite.com/products/product-name2

Ce qui en fait fonctionne ! Il est juste que je veux voir ma taxonomie personnalisée là-dedans, plus je veux être en mesure d'accéder au modèle de taxonomy.php j'ai installé en allant à:

mysite.com/products/category1/
mysite.com/products/category2/

Aucun de mes limaces sont les mêmes, je ne veux qu'ils soient. Voici la partie type de poste et la taxonomie de mon fichier functions.php:

///// CUSTOM POST TYPES /////

// register the new post type
register_post_type( 'product_listing', array( 
    'labels'                 => array(
        'name'               => __( 'Products' ),
        'singular_name'      => __( 'Product' ),
        'add_new'            => __( 'Add New' ),
        'add_new_item'       => __( 'Create New Product' ),
        'edit'               => __( 'Edit' ),
        'edit_item'          => __( 'Edit Product' ),
        'new_item'           => __( 'New Product' ),
        'view'               => __( 'View Products' ),
        'view_item'          => __( 'View Product' ),
        'search_items'       => __( 'Search Products' ),
        'not_found'          => __( 'No products found' ),
        'not_found_in_trash' => __( 'No products found in trash' ),
        'parent'             => __( 'Parent Product' ),
    ),
    'description'           => __( 'This is where you can create new products on your site.' ),
    'public'                => true,
    'show_ui'               => true,
    'capability_type'       => 'post',
    'publicly_queryable'    => true,
    'exclude_from_search'   => false,
    'menu_position'         => 2,
    'menu_icon'             => get_stylesheet_directory_uri() . '/images/tag_orange.png',
    'hierarchical'          => true,
    '_builtin'              => false, // It's a custom post type, not built in!
    'rewrite'               => array( 'slug' => 'products', 'with_front' => true ),
    'query_var'             => true,
    'supports'              => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions' ),
) );


//hook into the init action and call create_book_taxonomies when it fires
add_action( 'init', 'create_product_taxonomies', 0 );
//add_action('admin_init', 'flush_rewrite_rules');

//create two taxonomies, genres and writers for the post type "book"
function create_product_taxonomies() {
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        'name'              => _x( 'Categories', 'taxonomy general name' ),
        'singular_name'     => _x( 'Category', 'taxonomy singular name' ),
        'search_items'      =>  __( 'Search Categories' ),
        'all_items'         => __( 'All Categories' ),
        'parent_item'       => __( 'Parent Categories' ),
        'parent_item_colon' => __( 'Parent Categories:' ),
        'edit_item'         => __( 'Edit Category' ), 
        'update_item'       => __( 'Update Category' ),
        'add_new_item'      => __( 'Add New Category' ),
        'new_item_name'     => __( 'New Category Name' ),
        'menu_name'         => __( 'Category' ),
    );  

    register_taxonomy( 'product_cat', array( 'product_listing' ), array(
        'hierarchical'  => true,
        'labels'        => $labels,
        'show_ui'       => true,
        'query_var'     => true,
        //'rewrite'     => true,
        'rewrite'       => array( 'slug' => '%category%', 'with_front' => true ),
    ) );

    // Add new taxonomy, NOT hierarchical (like tags)
    $labels = array(
        'name'                       => _x( 'Scents', 'taxonomy general name' ),
        'singular_name'              => _x( 'Scent', 'taxonomy singular name' ),
        'search_items'               =>  __( 'Search Scents' ),
        'popular_items'              => __( 'Popular Scents' ),
        'all_items'                  => __( 'All Scents' ),
        'parent_item'                => null,
        'parent_item_colon'          => null,
        'edit_item'                  => __( 'Edit Scent' ), 
        'update_item'                => __( 'Update Scent' ),
        'add_new_item'               => __( 'Add New Scent' ),
        'new_item_name'              => __( 'New Scent Name' ),
        'separate_items_with_commas' => __( 'Separate scents with commas' ),
        'add_or_remove_items'        => __( 'Add or remove scents' ),
        'choose_from_most_used'      => __( 'Choose from the most used scents' ),
        'menu_name'                  => __( 'Scents' ),
    ); 

    register_taxonomy( 'scent', 'product_listing', array(
        'hierarchical'  => false,
        'labels'        => $labels,
        'show_ui'       => true,
        'query_var'     => true,
        //'rewrite'     => array( 'slug' => 'scents' ),
    ) );
}

J'ai aussi une autre taxonomie personnalisée de scents que je voudrais idéalement avoir une sorte d'url amicale mais je suis plus ouvert à ce sujet. Je voudrais peut-être accéder à une liste de tous les parfums en allant mysite.com/products/scents mais ils ne doivent pas être catégorie spécifique.

Aide Quelqu'un peut-il me?

Était-ce utile?

La solution

Modifier slug dans vos arguments de type poste à products/%product_cat% et slug dans vos arguments de taxonomie à juste products, puis rincez vos règles de réécriture. WordPress doit maintenant gérer /products/my-product-cat/post-name/!

Maintenant, enfin, nous devons aider WordPress un peu avec la génération permaliens (hors de la boîte, il ne reconnaît pas la balise permastruct %product_cat%):

/**
 * Inject term slug into custom post type permastruct.
 * 
 * @link   http://wordpress.stackexchange.com/a/5313/1685
 * 
 * @param  string  $link
 * @param  WP_Post $post 
 * @return array
 */
function wpse_5308_post_type_link( $link, $post ) {
    if ( $post->post_type === 'product_listing' ) {
        if ( $terms = get_the_terms( $post->ID, 'product_cat' ) )
            $link = str_replace( '%product_cat%', current( $terms )->slug, $link );
    }

    return $link;
}

add_filter( 'post_type_link', 'wpse_5308_post_type_link', 10, 2 );

Une chose à noter, ce sera juste saisir la première catégorie de produits pour le poste classés par ordre alphabétique . Si vous affectez plusieurs catégories à un seul produit, je peux facilement changer la façon dont il détermine lequel utiliser dans le permalien.

Lemme savoir comment vous obtenez avec cela, et nous pouvons aborder les autres questions!

Autres conseils

Merci @TheDeadMechanic, votre réponse m'a aidé, mais seulement partiellement. Je voulais faire la même chose @RodeoRamsey a demandé, mais avec des catégories imbriquées (ex: mysite.com/products/category1/child-category-1/grandchild-category-1/product-name). Et votre solution ne fonctionne pas pour que

Je suis finalement arrivé avec une solution étendue à ma question qui fonctionne, donc si quelqu'un d'autre a besoin de catégories / sous-catégories imbriquées, vous pouvez voir un solution détaillée sur ma propre question. Il aide les autres à l'espoir, et grâce aux étapes initiales.

Je ne suis pas sûr soutien wp cette structure hors de la boîte - mais vous pouvez très facilement créer vos propres règles de réécriture pour le faire

.

Découvrez une réponse précédente ici Auteur url rewrite .

Vous pouvez changer la ligne

$newrules['author/([^/]+)/songs/?$'] = 'index.php?post_type=songs&author=$matches[1]';

pour quelque chose comme

$newrules['products/([^/]+)/([^/]+)/?$'] = 'index.php?post_type=product_listing&product_cat=$matches[1]&name=$matches[2]';

la partie product_cat ici est peut-être superflu - Je ne sais pas si cela est nécessaire.

Vous pouvez ajouter des règles que vous aimez et ils auront la priorité sur ceux de encastrables.

Oui ça me rend fou avant de le permalien pour le type de poste personnalisé. J'ai trouvé un plugin pour gérer le type de poste personnalisé. Il est très facile à utiliser. http://wordpress.org/extend/plugins/custom-post-permalinks/ WP devrait ajouter cela comme une caractéristique essentielle! Leo

En fait, il est assez facile. Vous avez juste besoin d'une ligne. Voici mon code

function create_product_taxonomies()
{
// Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        'name' => _x('Categories', 'taxonomy general name'),
        'singular_name' => _x('Category', 'taxonomy singular name'),
        'search_items' => __('Search Categories'),
        'all_items' => __('All Categories'),
        'parent_item' => __('Parent Categories'),
        'parent_item_colon' => __('Parent Categories:'),
        'edit_item' => __('Edit Category'),
        'update_item' => __('Update Category'),
        'add_new_item' => __('Add New Category'),
        'new_item_name' => __('New Category Name'),
        'menu_name' => __('Category'),
    );

    register_taxonomy('product_cat', array('product_listing'), array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('hierarchical' => true),
    ));

Et appliqué à la taxonomie générée pour mon avis CPT de GenerateWP.com. J'utilise sur mon propre site WordPress, https://www.wpstarters.com

function reviews_category_taxonomy() {

    $labels = array(
        'name'                       => _x( 'Reviews Categories', 'Taxonomy General Name', 'reviews_category' ),
        'singular_name'              => _x( 'Reviews Category', 'Taxonomy Singular Name', 'reviews_category' ),
        'menu_name'                  => __( 'Reviews Category', 'reviews_category' ),
        'all_items'                  => __( 'All Review Categories', 'reviews_category' ),
        'parent_item'                => __( 'Parent Review Category', 'reviews_category' ),
        'parent_item_colon'          => __( 'Parent Review Category:', 'reviews_category' ),
        'new_item_name'              => __( 'New Review Category Name', 'reviews_category' ),
        'add_new_item'               => __( 'Add New Review Category', 'reviews_category' ),
        'edit_item'                  => __( 'Edit Review Category', 'reviews_category' ),
        'update_item'                => __( 'Update Review Category', 'reviews_category' ),
        'view_item'                  => __( 'View Review Category', 'reviews_category' ),
        'separate_items_with_commas' => __( 'Separate items with commas', 'reviews_category' ),
        'add_or_remove_items'        => __( 'Add or remove items', 'reviews_category' ),
        'choose_from_most_used'      => __( 'Choose from the most used', 'reviews_category' ),
        'popular_items'              => __( 'Popular Review Categories', 'reviews_category' ),
        'search_items'               => __( 'Search Items', 'reviews_category' ),
        'not_found'                  => __( 'Not Found', 'reviews_category' ),
        'no_terms'                   => __( 'No Review Categories', 'reviews_category' ),
        'items_list'                 => __( 'Review Categories list', 'reviews_category' ),
        'items_list_navigation'      => __( 'Review Categories list navigation', 'reviews_category' ),
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => false,
        'show_in_rest'               => true,
        'rewrite' => array( 'hierarchical' => true ),
    );
    register_taxonomy( 'reviews_category', array( 'wps_reviews' ), $args );

}
add_action( 'init', 'reviews_category_taxonomy', 0 );

Tout ce qu'il faut le mettre donc la 'réécriture' => array ( 'hiérarchique' => true),

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top