2017-02-20 12 views
0

Я использую этот плагин под названием «Custom Post Type Permalinks», который помогает мне получить тип сообщения, чтобы выстроить его так называемую таксономию, которую я создал, product_category, но я не могу получить правильные ссылки таксономии product_category с /shop/ перед ними, которые также работают с дочерними категориями.WordPress дочерние категории, не работающие в URL-адресах, как они должны

В принципе, пользовательский тип сообщения - product и имеет структуру url, например:/shop/category/{Category Parent}/{Category Child}/{Product Name}, и выглядит так, как показано в functions.php при регистрации тип таможенного поста:

register_post_type('product', array(
     'description'   => __('Products'), 
     'label'     => __('products'), 
     'labels'    => array(
      'name'     => _x('Product', 'Post Type General Name'), 
      'singular_name'   => _x('Product', 'Post Type Singular Name'), 
      'menu_name'    => __('Products'), 
      'parent_item_colon'  => __('Parent Product'), 
      'all_items'    => __('All Products'), 
      'view_item'    => __('View Product'), 
      'add_new_item'   => __('Add New Product'), 
      'add_new'    => __('Add New'), 
      'edit_item'    => __('Edit Product'), 
      'update_item'   => __('Update Product'), 
      'search_items'   => __('Search Product'), 
      'not_found'    => __('Not Found'), 
      'not_found_in_trash' => __('Not Found in Trash') 
     ), 
     'taxonomies'   => array('product_category'), 
     'supports'    => array('title', 'editor', 'thumbnail'), 
     'rewrite'    => array('slug' => 'shop', 'with_front' => false), 
     "cptp_permalink_structure" => "/category/%product_category%/%postname%/", 
     'hierarchical'   => false, 
     'public'    => true, // Needs to be set to true to be able to show the endpoints! 
     'show_ui'    => true, 
     'show_in_menu'   => true, 
     'show_in_nav_menus'  => false, 
     'show_in_admin_bar'  => true, 
     'query_var'    => true, 
     'menu_position'   => 10, 
     'menu_icon'    => 'dashicons-cart', 
     'can_export'   => true, 
     'has_archive'   => true, 
     'exclude_from_search' => false, 
     'publicly_queryable' => true, 
     'capability_type'  => 'page' 
    ) 
); 

cptp_permalink_structure ключ позволяет мне назначить %product_category% так, что категории (родитель и дети) собирается в URL и название продукта является последней частью пути. Мне нужно было дать ему пулю, поэтому я выбираю shop, так что у него есть что-то, так как слизняк и магазин должны быть в любом случае. Все URL-адреса продукта работают отлично. И выглядеть следующим образом: /shop/category/{Category Parent}/{Category Child}/{Product Name}/

Теперь для пользовательской таксономии, я добавил в функции, которая получает инициированную init действия WordPress и выглядит следующим образом:

// I do not want to use 'category' since I don't want post categories mixed with product categories. 
register_taxonomy('product_category', 'product', array(
    'label' => __('Category'), 
    'rewrite' => array('slug' => 'shop/category', 'hierarchical' => true, 'with_front' => false), 
    'labels' => array(
     'name' => __('Categories'), 
     'singular_name' => __('Category'), 
     'all_items' => __('All Categories'), 
     'edit_item' => __('Edit Category'), 
     'view_item' => __('View Category'), 
     'update_item' => __('Update Category'), 
     'add_new_item' => __('Add New Category'), 
     'new_item_name' => __('New Category Name'), 
     'parent_item' => __('Parent Category'), 
     'parent_item_colon' => __('Parent Category:'), 
     'search_items' => __('Search Categories'), 
     'popular_items' => __('Popular Categories'), 
     'separate_items_with_commas' => __('Separate Categories with commas'), 
     'add_or_remove_items' => __('Add or Remove Categories'), 
     'choose_from_most_used' => __('Choose from the most used Categories'), 
     'not_found' => __('No Categories found') 
    ), 
    'public' => true, 
    'show_ui' => true, 
    'show_in_menu' => true, 
    'hierarchical' => true, 
    'exclude_from_search' => false, 
    'description' => 'Categories associated with Products.', 
    'query_var' => true, 
    'capabilities' => array(
     'manage_terms' => 'manage_options', //by default only admin 
     'edit_terms' => 'manage_options', 
     'delete_terms' => 'manage_options', 
     'assign_terms' => 'edit_posts' // means administrator', 'editor', 'author', 'contributor' 
    ) 
)); 

Я попытался с помощью shop/category для переписывайте слизню таксономии (как вы можете видеть выше), которая была бы идеальной, если бы только страницы архива дочерней категории не производили 404 страницы. Итак, пока: /shop/category/{Category Parent}/ и /shop/category/{Category Child}/ работ, /shop/category/{Category Parent}/{Category Child}/ возвращает страницу ошибки 404. Итак, я в недоумении о том, как получить дочерние категории показывает, как в /shop/category/{Category Parent}/{Category Child}/

Примечание: Если изменить только category как переписывания слизняк, детские Категории выстраиваются правильно вот так: /category/{Category Parent}/{Category Child}, но проблема в том, , Мне нужно /shop/ до /category/ здесь.

Как это сделать? Пытаясь понять это в течение нескольких дней, с разными путями, попробовал также добавить правило перезаписи (при смене переписывающего пули только на category).

add_rewrite_rule('shop/category/?([^/]*)', 'index.php?product_category=$matches[1]', 'top'); 

Но правило перезаписи также не работает для категорий детей. И возвращает архив родительской категории, а не дочерний.

Как я проверил это в файле archive.php со следующим кодом:

$tax_slug = get_query_var('product_category'); 
echo '<pre>', var_dump($tax_slug), '</pre>'; 

И возвращает родительскую категорию слизняка вместо ребенка на ребенка категорий.

Любая помощь приветствуется здесь, я вытаскиваю свои волосы ... лысый!

EDIT - Возможный метод, который может работать

Так, в принципе, это может быть столь же просто, как создать еще один BASE для этой таксономии в разделе Permalinks админа. Но как создать базу для пользовательской таксономии?Существует уже BASE для категорий и тегов, но если это может сработать, мне понадобится BASE для product_category, а slug для таксономии product_category может быть только category, а BASE добавит shop перед этим для всех ссылок. Но как создать базу для пользовательской таксономии?

ответ

0

Я думаю, вы должны обновить аргумент запроса в functions.php. Я пробовал ваш код в моей локальной установке, и он отлично работал с моим.

Обновленный код для этого:

/* Have WordPress match postname to any of our public post types (post, page, product) 
* All of our public post types can have /post-name/ as the slug, so they better be unique across all posts 
* By default, core only accounts for posts and pages where the slug is /post-name/ 
*/ 

function na_parse_request($query) { 

    if (! $query->is_main_query() || 2 != count($query->query) || ! isset($query->query['page'])) { 
     return; 
    } 

    if (! empty($query->query['name'])) { 
     $query->set('post_type', array('post', 'page', 'product')); 
    } 
} 
add_action('pre_get_posts', 'na_parse_request'); 

Это в основном изменяет строку запроса при обновлении каких-либо изменений в постоянную ссылку и переписать правила. Здесь вы отправляете значение типа «продукт», чтобы задать запрос.

Надеюсь, что это сработает для вас.

Спасибо

+0

Я не знаю, что вы делаете, но страницы архива дочерних категорий для меня не работают. Вместо этого они возвращают 404 страницы. Я выложу несколько скриншотов ... –

+0

@SolomonClosson вы пробовали мой код в functions.php? Я попробовал на своем локальном компьютере, это сработало для меня как от вас, так и от вас. Поэтому я думаю, что этот выше код поможет вам, но убедитесь, что вы вставляете его в functions.php в папку темы. –

+0

Да, я поместил ваш код в functions.php в путь темы, сохранил permalinks, он не работает. –

0

Фигурные это после того, как смотреть на свалку правил из rewrite_rules_array фильтра.

я добавил в этот бит в действие WordPress init и теперь работает:

add_rewrite_rule('shop/category/(.+?)/?$', 'index.php?product_category=$matches[1]&cpage=$matches[2]', 'top'); 

Спасибо всем за вашу помощь в этом. Пуля для пользовательской таксономии то же самое на: shop/category

главное здесь для того, чтобы получить дочерние категории работающих этот бит: &cpage=$matches[2] который я wan't в курсе, а также даже не знаю, на имя дочерняя категория - cpage, это было обнаружено при просмотре вывода rewrite_rules_array, который я только что сбросил на странице, чтобы увидеть.

 Смежные вопросы

  • Нет связанных вопросов^_^