it-swarm.xyz

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

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

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

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

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

10
dotty

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

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

A "Продукты" Страница

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

http: //example.php/products/

A "Список продуктов" Shortcode

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

 A Product's Page that uses a Shortcode to display a list of Products in 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. Нажмите "Сохранить меню"

 Adding a Products Page Menu Option to a WordPress Site 
(источник: mikeschinkel.com )

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

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

 A List of Products using a Custom Post Type in WordPress 
(источник: mikeschinkel.com )

12
MikeSchinkel

Это изначально не поддерживается 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/

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

4
John P Bloch

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

0
bueltge
Насколько я вижу, я могу добавить только определенные "продукты", я не могу добавить "архив" продуктов. Я пытаюсь добавить ссылку в меню, чтобы перейти на страницу со списком ВСЕХ продуктов. есть идеи как это сделать?

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

Пример У меня есть собственный тип записи под названием "Работа" с таксономией, помеченной как "позиции" alt text

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

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

0
Chris_O