it-swarm.cn

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

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

我已经开始创建一个名为“products”的新帖子类型,正如您所猜测的那样,这个列表产品。

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

知道怎么做吗?

10
dotty

@dotty 正如你可以看到这个trac票证: 应该有自定义帖子类型的索引页面 所以显然还没有需要在WordPress核心中解决。

@John P Bloch和@Chris_O都给你很好的选择;我打算给你第3名。

A “Products” Page

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

http://example.php/products/

A “产品列表” Shortcode

接下来创建一个 Shortcode ,您可以将其嵌入到“Products” page中。在我的例子中,我称之为[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/作为产品列表。从那里,您只需在菜单中添加自定义链接即可。

但是,如果您希望使用Feed进行真正的归档(按月,年等),则需要更详细的代码。如果您的“产品”是非分层的帖子类型(看起来应该是这样),您可以使用我的插件:

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

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

4
John P Bloch

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

0
bueltge
据我所知,我只能添加某些“产品”,我无法添加产品的“存档”。我要做的是添加一个菜单链接,转到列出所有产品的页面。知道怎么做吗?

您需要为“产品”帖子类型分配分类,然后将分类术语添加到您的一个自定义菜单中,然后将用户带到所用分类法下的所有产品的归档页面。

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

如果我想要所有具有“当前开放”分类术语的工作,我会选择它并将其添加到菜单中。 alt text

如果您需要在归档页面上拥有所有“产品”帖子类型,则可以为所有这些分配父分类,以便它们都可以在归档页面上列出。

0
Chris_O