问题描述
干草,我正在玩 WordPress 3.0 和两个新功能,自定义帖子类型和菜单编辑器。
我已经开始创建一个名为 「products
」 的新的帖子类型,就像你猜到的,这个列表的产品。
我使用沼泽标准模板,我正在创建一个新的菜单来替换顶级导航。据我看到,我只能添加一些”products”,我不能添加一个”archive” 的产品。我想要做的是添加一个菜单链接去一个列出所有产品的页面。
有什么想法怎么办?
最佳解决方案
@dotty 你可以看到这个 trac 门票:应该有自定义帖子类型的索引页面,所以显然需要在 WordPress 核心尚未解决。
@John P Bloch 和 @Chris_O 都给你很好的选择; 我要给你一个第三。
“Products” 页
首先为您的自定义帖子类型创建一个页面,并将其称为”Products” 。这将给它以下 URL:
“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):
-
在管理菜单中选择菜单选项。
-
单击”+” 添加一个新菜单。
-
输入你的菜单名称,无论你喜欢什么。
-
点击”Create Menu” 按钮 (屏幕截图显示”Save Menu”,但添加时它将是”Create Menu” 。)
-
选择您的新菜单作为您的”Primary Navigation” 。
-
选择您的”Products” 页面。
-
点击 「添加到菜单」
-
点击”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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。