Пользовательские типы сообщений Wordpress, пользовательские таксономии, URL-адреса и темы - PullRequest
0 голосов
/ 29 июня 2011

Я пытаюсь настроить веб-сайт Wordpress 3, на котором я через плагин создал пользовательский тип записи, называемый «продукт».Наряду с этим пользовательским типом поста, я создал собственную таксономию, чтобы продукты могли быть помещены в категорию, не влияя на категории блога.Все это прекрасно работает через систему администратора.Пока все хорошо.

Проблема возникает, когда я хочу получить доступ к продуктам и категориям.В идеале у меня следующая структура URL:

/products - показывает страницу со всеми категориями.

/products/category - показывает все товары, назначенные для данной категории.

/products/product - показывает один продукт.

За последние несколько дней я перечитывал различные источники, и информация, которую я ищу, кажется очень фрагментированной, что меня очень смущаето проблеме и незнании, возможно ли то, что я хочу, на самом деле возможно или нет в контексте Wordpress.

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

Итак, основной вопрос:Как я могу сделать так, чтобы мои собственные типы сообщений и пользовательские таксономии соответствовали нужному шаблону темы?

1 Ответ

1 голос
/ 06 августа 2013

Я знаю, что это старый вопрос, но это может помочь кому-то еще ...

Чтобы выполнить то, что вам нужно, вам нужно использовать register_post_type и register_taxonomy WordPress.

В вашем файле functions.php вам понадобится нечто подобное

// Register Custom Post Type
function products() {
    $labels = array(
        'name'                => 'Products',
        'singular_name'       => 'Product',
        'menu_name'           => 'Product',
        'parent_item_colon'   => 'Parent Product:',
        'all_items'           => 'All Products',
        'view_item'           => 'View Product',
        'add_new_item'        => 'Add New Product',
        'add_new'             => 'New Product',
        'edit_item'           => 'Edit Product',
        'update_item'         => 'Update Product',
        'search_items'        => 'Search products',
        'not_found'           => 'No products found',
        'not_found_in_trash'  => 'No products found in Trash'
    );
    $args = array(
        'label'               => 'product',
        'description'         => 'Product information pages',
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', ),
        'taxonomies'          => array( 'category' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'menu_icon'           => '',
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post'
    );
    register_post_type( 'product', $args );
}
// Hook into the 'init' action
add_action( 'init', 'products', 0 );

// Register Custom Taxonomy
function product-category()  {
    $labels = array(
        'name'                       => 'Product Category',
        'singular_name'              => 'Product Categories',
        'menu_name'                  => 'Product Category',
        'all_items'                  => 'All Product Categories',
        'parent_item'                => 'Parent Product Category',
        'parent_item_colon'          => 'Parent Product Category:',
        'new_item_name'              => 'New Product Category Name',
        'add_new_item'               => 'Add New Product Category',
        'edit_item'                  => 'Edit Product Category',
        'update_item'                => 'Update Product Category',
        'separate_items_with_commas' => 'Separate product categories with commas',
        'search_items'               => 'Search product categories',
        'add_or_remove_items'        => 'Add or remove product categories',
        'choose_from_most_used'      => 'Choose from the most used product categories',
    );
    $rewrite = array(
        'slug'                       => 'product-category',
        'with_front'                 => true,
        'hierarchical'               => true,
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => false,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
        'query_var'                  => 'product-category',
        'rewrite'                    => $rewrite,
    );
    register_taxonomy( 'product-category', 'product', $args );

}
// Hook into the 'init' action
add_action( 'init', 'product-category', 0 );

Вы можете использовать собственный пост-генератор, такой как http://generatewp.com/post-type/, чтобы облегчить себе жизнь при работе со всеми опциями.

Важно, когда вы регистрируете свои пользовательские типы записей и таксономии, чтобы сбрасывать правила DNS после добавления этого кода или внесения каких-либо изменений в структуру URL. Сделайте это, посетив страницу Настройки администратора WordPress -> Постоянные ссылки, и она автоматически сбросит правила DNS.

Отредактируйте следующие файлы в папке вашей темы для управления отображаемым шаблоном:

  • архив-product.php
  • таксономия продукт-category.php
  • одной product.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...