问题描述

干草,我正在玩 WordPress 3.0 和两个新功能,自定义帖子类型和菜单编辑器。

我已经开始创建一个名为 「products」 的新的帖子类型,就像你猜到的,这个列表的产品。

我使用沼泽标准模板,我正在创建一个新的菜单来替换顶级导航。据我看到,我只能添加一些”products”,我不能添加一个”archive” 的产品。我想要做的是添加一个菜单链接去一个列出所有产品的页面。

有什么想法怎么办?

最佳解决方案

@dotty 你可以看到这个 trac 门票:应该有自定义帖子类型的索引页面,所以显然需要在 WordPress 核心尚未解决。

@John P Bloch 和 @Chris_O 都给你很好的选择; 我要给你一个第三。

“Products” 页

首先为您的自定义帖子类型创建一个页面,并将其称为”Products” 。这将给它以下 URL:

http://example.php/products/

“Products List” 短码

接下来创建一个可以嵌入到”Products” 页面中的 Shortcode 。在我的例子中,我称之为 [product-list]。以下是使用它的屏幕截图:

请注意,这样的短代码将是添加大量可选功能的一个很好的候选者,并使其能够处理许多不同的后期类型,但为了清晰起见,我几乎都是硬编码的一切。你当然可以用它作为你自己的短码的起点:

<?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. 点击”Create Menu” 按钮 (屏幕截图显示”Save Menu”,但添加时它将是”Create Menu” 。)

  5. 选择您的新菜单作为您的”Primary Navigation” 。

  6. 选择您的”Products” 页面。

  7. 点击 「添加到菜单」

  8. 点击”Save Menu”

最后,输出

以下是一个基本的产品列表:

次佳解决方案

这不是 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/作为产品列表。从那里,您只需添加一个自定义链接到您的菜单。

但是,如果您希望使用 Feed 进行真正归档 (按月,年等),则需要更详细的代码。如果你的’products’ 是一个 non-hierarchical 的帖子类型 (好像应该是),你可以使用我的插件:

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

这给您额外的领域来定制您的永久链接 (像您可以使用博客帖子),并将为您提供根据类别,作者,月,年,职位类别等自定义固定链接的能力。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。