我需要在家中显示转到自定义post_type的存档URL(archive- {post_type} .php)的按钮。我该怎么做?
#1 楼
@Silent:您好:原来WordPress 3.1中有一个功能可以完全满足您的要求,它名为
get_post_type_archive_link()
;这是您的称呼方式(假设名为'product'
的自定义帖子类型):<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
在我发现WordPress确实具有内置功能之前,以下是我的先前回答-in此用例。
先前的答案:
除非我忽略了WordPress 3.1的核心源代码中的某些内容,否则我认为您正在寻找的函数如
get_archive_link()
可能会这样调用(假设名为'product'
的自定义帖子类型):<a href="<?php echo get_archive_link('product'); ?>">Products</a>
这是源代码,您可以将其放入主题的
function.php
文件或.php
文件中对于您可能正在编写的插件:if (!function_exists('get_archive_link')) {
function get_archive_link( $post_type ) {
global $wp_post_types;
$archive_link = false;
if (isset($wp_post_types[$post_type])) {
$wp_post_type = $wp_post_types[$post_type];
if ($wp_post_type->publicly_queryable)
if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
$slug = $wp_post_type->has_archive;
else if (isset($wp_post_type->rewrite['slug']))
$slug = $wp_post_type->rewrite['slug'];
else
$slug = $post_type;
$archive_link = get_option( 'siteurl' ) . "/{$slug}/";
}
return apply_filters( 'archive_link', $archive_link, $post_type );
}
}
我实际上在周末正在研究这个确切的逻辑,尽管我还不能100%确定逻辑的顺序尽管它可能适用于任何特定站点,但在WordPress可能看到的所有用例中通常是正确的。
建议通过trac将其添加到WordPress中也是一件好事我想今天晚上晚些时候。
评论
顺便说一句,当您提交笔迹时,可以请在这里链接。
– ariefbayu
2011年3月8日23:52
@silent-是的,当然。
– MikeSchinkel
11年8月8日在23:59
@Mike-我会写类似的东西,如果你没有....;)我想知道这是否是@silent所想的,但是提到按钮却让我想到了其他东西。
– t31os
2011年3月9日0:00
@ t31os-这个周末我为URL路由插件使用了相同的逻辑,所以我有了一个开端。 :)至于按钮,您可以添加一个答案来解决这个问题?
– MikeSchinkel
2011年3月9日,0:08
我不太确定还有什么要解决的,我想您的上述功能可以解决所要求的内容... :)
– t31os
2011年3月9日,0:13
#2 楼
当您注册帖子类型时,您可以使用“ has_archive”参数将字符串作为子句传递,并确保还将rewrite设置为true或数组,但不能设置为false,然后您的CPT存档URL将为http:// www .YOURDOMAIN.com / has_archive_slug例如,
如果您在register_post_type中设置例如:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => 'product',
'capability_type' => 'post',
'has_archive' => 'products',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('product',$args);
,那么您的单个网址是:
http://www.YOURDOMAIN.com/product/postName
,而您的存档网址为:
http://www.YOURDOMAIN.com/products/
评论
万岁。我一直以为has_archive是一个布尔值,但是现在我知道可以给它一个字符串,所以我的单数自定义帖子类型配方可以有多个子句/ recipes /
– Astrotim
2014年12月17日0:30在
我不记得他们是否/何时进行切换,或者是否总是出错,但是在2017年,“重写”仅接受布尔值或数组值。您列出的不是'rewrite'=>'product',而应该是'rewrite'=> array('slug'=>'product'),。
–迈克
17年11月15日在1:24
评论
什么样的按钮,将其添加到导航菜单,还是仅添加通用链接?存档URL通常为yoursite.com/type-slug,除非您将其明确设置为其他名称,例如。 yoursite.com/some-other-url ..@ t31os:是的,现在,我像这样对它进行了硬编码。但是,很快将使用@Mike的代码对其进行更改。