在WordPress 3.0中将帖子档案添加到导航菜单

时间:2010-08-23 作者:dotty

嘿,我正在玩弄WordPress 3.0和两(2)个新功能,自定义帖子类型和菜单编辑器。

我首先创建了一个新的帖子类型,名为“products“,正如您所猜测的,此列表列出了产品。

我正在使用bog标准模板,并创建一个新菜单来替换顶部导航。据我所知,我只能向其中添加某些“产品”,而不能添加产品的“存档”。我想做的是在菜单上添加一个链接,进入一个列出所有产品的页面。

你知道怎么做吗?

4 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

@dotty 正如您可以从这张trac票据中看到的:There should be index pages for custom post types 因此,很明显,WordPress核心尚未解决这一需求。

“约翰·P·布洛赫”和“克里斯·O”都给了你很好的选择;我会给你第三个。

A“产品”页面

首先创建Page 用于自定义帖子类型,并将其称为“产品”。这将为其提供以下URL:

http://example.php/products/

一个“产品列表”短代码

下一步创建一个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);
  }
}

Apost-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菜单,例如二十个十):

在管理菜单中选择菜单选项"+" 添加新菜单

  • 选择新菜单作为“主导航”
  • 选择您的产品页面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)

    SO网友:John P Bloch

    WordPress本机不支持此操作。但是,您可以将其添加到函数中。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\' );
    
    这将给你举个例子。com/products/作为产品列表。从那里,您只需向菜单添加一个自定义链接。

    然而,如果您想要对提要进行真正的归档(按月、按年等),则需要更详细的代码。如果您的“产品”是非层次结构的帖子类型(似乎应该是),您可以使用我的插件:

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

    这为您提供了额外的字段来自定义永久链接(就像您可以使用博客帖子一样),并使您能够根据类别、作者、月份、年份、帖子类型等自定义永久链接。

    SO网友:Chris_O

    就我所见,我只能添加某些“产品”,而不能添加产品的“档案”。我想做的是在菜单上添加一个链接,进入一个列出所有产品的页面。你知道怎么做吗?您需要为“products”post类型分配一个分类法,然后将分类法术语添加到一个自定义菜单中,然后将用户带到所用分类法下所有产品的存档页面。

    Example我有一个名为“Jobs”的自定义帖子类型,其分类法标记为“positions”alt text

    如果我想要所有工作都使用“当前空缺”分类术语,我会选择它并将其添加到菜单中。alt text

    如果您需要将所有“产品”帖子类型都放在归档页面上,您可以为它们分配一个父分类法,以便它们都可以列在归档页面上。

    SO网友:bueltge

    我认为,通过自定义帖子类型创建帖子类型存档并将存档的帖子移动到此存档中是一个更好的解决方案。还要将当前post\\u类型添加到此新post\\u类型的POSTETA中,以撤消此操作。我已经写了一个插件,目前你可以看到这个,没有样式表,图像和语言文件,在gist.github/978690.

    结束

    相关推荐