@dotty Как вы можете видеть из этого тик-тикета: должны быть индексные страницы для пользовательских типов записей, поэтому очевидно, что потребность в ядре WordPress еще не решена.
Оба @John P Bloch и @Chris_O дают вам хорошие альтернативы; Я собираюсь дать вам третий.
«Продукты» Page
Сначала создайте страницу для своего пользовательского типа сообщения и назовите его «Продукты» . Это даст ему следующий URL:
Http: //example.php/products/
«Список продуктов» Сокращенный
Затем создайте шорткод, который вы можете встроить в свою страницу «Продукты» . В моем примере я назвал это [product-list]
. Вот скриншот того, как это будет выглядеть:
(источник: mikeschinkel.com )
Обратите внимание, что такой шорткод был бы отличным кандидатом для добавления множества дополнительных функций и обеспечения возможности его работы для многих различных типов записей, но в интересах ясности я в значительной степени жестко закодировал все. Конечно, вы можете использовать его в качестве отправной точки для собственного шорткода:
<?php
add_shortcode('product-list', 'my_product_list');
function my_product_list($args) {
$save_post = $GLOBALS['post']; // Save state so you can restore later
$post_type = 'product';
$template_file = get_stylesheet_directory() . "/post-{$post_type}.php";
if (!file_exists($template_file)) {
return "<p>Missing template [$template_file].</p>";
} else {
global $post;
$q = new WP_Query("showposts=10&post_type={$post_type}&orderby=title&order=ASC");
$rows = array();
$rows[] = '<div class="post-list ' . $post_type . '-post-list">';
global $post_list_data;
$post_list_data = array();
$post_list_data['post_count'] = $post_count = count($q->posts);
foreach ($q->posts as $post) {
$q->the_post();
ob_start();
include($template_file);
$rows[] = ob_get_clean();
}
$rows[] = '</div>';
$GLOBALS['post'] = $save_post;
return implode("\n",$rows);
}
}
post-product.php
Тема шаблон файл
Затем вам нужно создать файл шаблона темы, который отображает только один продукт. Функция, которая реализует шорткод, называет файл шаблона post-product.php
и вот хорошая отправная точка:
<?php
/**
* post-product.php - File to display only one product within a list of products.
*/
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2 class="entry-title"><?php the_title(); ?></h2>
<div class="entry-content">
<?php the_content(); ?>
</div>
</div>
Добавить опцию меню
Последнее, что вы хотите добавить опцию меню. Это очень просто, как вы можете видеть на этом снимке экрана (ниже предполагается, что вы ничего не делали с меню WordPress 3.0 ранее, и что вы используете тему, поддерживающую меню WordPress 3.0, например Twenty Ten):
- Выберите пункт меню в меню администратора.
- Нажмите « + », чтобы добавить новое меню.
- Введите название вашего меню, как вам нравится.
- Нажмите кнопку «Создать меню» (на снимке экрана показано «Сохранить меню», но при добавлении будет «Создать меню» .)
- Выберите новое меню в качестве «Основной навигации» .
- Выберите страницу «Продукты ».
- Нажмите «Добавить в меню»
- Нажмите «Сохранить меню»
(источник: mikeschinkel.com )
Наконец, вывод
А вот как может выглядеть основной список товаров:
(источник: mikeschinkel.com )
current-menu-item
класс не применяется к продуктам »li
Это изначально не поддерживается WordPress. Тем не менее, вы можете добавить это в ваш файл functions.php, и он будет работать:
Это даст вам example.com/products/ в виде списка продуктов. Оттуда вы просто добавляете пользовательскую ссылку в ваше меню.
Однако, если вы хотите истинное архивирование (по месяцам, годам и т. Д.) С фидами, вам нужен более подробный код. Если ваши «продукты» имеют неиерархический тип записей (кажется, что так и должно быть), вы можете использовать мой плагин:
http://www.wordpress.org/extend/plugins/custom-post-permalinks/
Это даст вам дополнительные поля для настройки ваших постоянных ссылок (как вы можете с постами в блоге) и даст вам возможность настроить постоянные ссылки на основе категории, автора, месяца, года, типа публикации и т. Д.
источник
Вам нужно будет присвоить таксономию типу записи "продукты", а затем добавить термин таксономии в одно из ваших пользовательских меню, которое затем приведет пользователя на страницу архива всех продуктов в рамках используемой таксономии.
Пример У меня есть пользовательский тип поста под названием «Работа» с таксономией «позиции»
Если бы я хотел получить все задания с термином таксономии «Текущие вакансии», я бы выбрал его и добавил в меню.
Если вам нужно, чтобы на странице архива были все типы сообщений "продукты", вы можете назначить родительскую таксономию всем им, чтобы они могли быть перечислены на странице архива.
источник
Я думаю, что это лучшее решение для создания с помощью пользовательского поста типа архива поста и перемещения архивированных постов в этом архиве. Также добавьте текущий post_type к postmeta этого нового post_type для отмены этого. Я написал плагин для этого, и вы можете видеть это без таблиц стилей, изображений и языкового файла на gist.github / 978690 .
источник