Добавление архива сообщений в меню навигации в WordPress 3.0

10

Слушай, я играю с WordPress 3.0 и двумя (2) новыми функциями, пользовательскими типами постов и редактором меню .

Я начал с создания нового типа записи под названием " products", как вы уже догадались, в этом списке продуктов.

Я использую стандартный шаблон болота и создаю новое меню для замены верхней навигации. Насколько я вижу, я могу добавить только определенные «продукты» , я не могу добавить «архив» продуктов. Я пытаюсь сделать ссылку на меню, чтобы перейти на страницу со списком ВСЕХ продуктов.

есть идеи как это сделать?

рехнувшийся
источник

Ответы:

12

@dotty Как вы можете видеть из этого тик-тикета: должны быть индексные страницы для пользовательских типов записей, поэтому очевидно, что потребность в ядре WordPress еще не решена.

Оба @John P Bloch и @Chris_O дают вам хорошие альтернативы; Я собираюсь дать вам третий.

«Продукты» Page

Сначала создайте страницу для своего пользовательского типа сообщения и назовите его «Продукты» . Это даст ему следующий URL:

Http: //example.php/products/

«Список продуктов» Сокращенный

Затем создайте шорткод, который вы можете встроить в свою страницу «Продукты» . В моем примере я назвал это [product-list]. Вот скриншот того, как это будет выглядеть:

Страница продукта, которая использует шорткод для отображения списка продуктов в WordPress
(источник: 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):

  1. Выберите пункт меню в меню администратора.
  2. Нажмите « + », чтобы добавить новое меню.
  3. Введите название вашего меню, как вам нравится.
  4. Нажмите кнопку «Создать меню» (на снимке экрана показано «Сохранить меню», но при добавлении будет «Создать меню» .)
  5. Выберите новое меню в качестве «Основной навигации» .
  6. Выберите страницу «Продукты ».
  7. Нажмите «Добавить в меню»
  8. Нажмите «Сохранить меню»

Добавление опции меню страницы товаров на сайт WordPress
(источник: mikeschinkel.com )

Наконец, вывод

А вот как может выглядеть основной список товаров:

Список продуктов, использующих пользовательский тип публикации в WordPress
(источник: mikeschinkel.com )

MikeSchinkel
источник
Остался вопрос, как изменить пункт меню продуктов, чтобы он содержал подменю со всеми продуктами.
Хакре
@harke Обновлено.
MikeSchinkel
хорошо, что это была не просьба :). Мне просто интересно, как автоматически создается выпадающий список, и я думаю, что это все еще не помогает. Но, как написано, это не просьба.
2010 г.,
Привет, у меня есть проблема с этим и надеюсь, что вы могли бы помочь. Проблема в том, что current-menu-itemкласс не применяется к продуктам »li
Рейгель
Отсутствующие изображения. : /
fuxia
4

Это изначально не поддерживается WordPress. Тем не менее, вы можете добавить это в ваш файл functions.php, и он будет работать:

function give_me_a_list_of_products(){
  add_rewrite_rule( 'products/?$', 'index.php?post_type=products', 'top' );
}

add_action( 'init', 'give_me_a_list_of_products' );

Это даст вам example.com/products/ в виде списка продуктов. Оттуда вы просто добавляете пользовательскую ссылку в ваше меню.

Однако, если вы хотите истинное архивирование (по месяцам, годам и т. Д.) С фидами, вам нужен более подробный код. Если ваши «продукты» имеют неиерархический тип записей (кажется, что так и должно быть), вы можете использовать мой плагин:

http://www.wordpress.org/extend/plugins/custom-post-permalinks/

Это даст вам дополнительные поля для настройки ваших постоянных ссылок (как вы можете с постами в блоге) и даст вам возможность настроить постоянные ссылки на основе категории, автора, месяца, года, типа публикации и т. Д.

Джон П Блох
источник
Спасибо за отличную информацию здесь. Я ищу то же самое, но хотя с перезаписью все работает нормально, я застрял, потому что, когда я добавляю пользовательскую ссылку в меню, общедоступный веб-сайт, похоже, не меняет CSS, указывая, что посетитель находится на этой странице. Не могли бы вы сообщить мне, как это сделать, чтобы я мог показать пункт меню в состоянии «включено», если вы находитесь в архиве «продукты»?
NetConstructor.com
0
Насколько я вижу, я могу добавить только определенные «продукты», я не могу добавить «архив» продуктов. Я пытаюсь сделать ссылку на меню, чтобы перейти на страницу со списком ВСЕХ продуктов. есть идеи как это сделать?

Вам нужно будет присвоить таксономию типу записи "продукты", а затем добавить термин таксономии в одно из ваших пользовательских меню, которое затем приведет пользователя на страницу архива всех продуктов в рамках используемой таксономии.

Пример У меня есть пользовательский тип поста под названием «Работа» с таксономией «позиции» альтернативный текст

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

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

Chris_O
источник
@Chris_O : Это один, но не единственный способ, который также требует значительных усилий для сохранения классификации пользователем. В любом случае, JMTCW.
MikeSchinkel
Имеет смысл. Надеемся, что индексная страница пользовательского типа поста будет рассмотрена в основном.
Chris_O
0

Я думаю, что это лучшее решение для создания с помощью пользовательского поста типа архива поста и перемещения архивированных постов в этом архиве. Также добавьте текущий post_type к postmeta этого нового post_type для отмены этого. Я написал плагин для этого, и вы можете видеть это без таблиц стилей, изображений и языкового файла на gist.github / 978690 .

bueltge
источник