看来是愚蠢的问题。但是,我无法弄清楚:(。

我需要在家中显示转到自定义post_type的存档URL(archive- {post_type} .php)的按钮。我该怎么做?

评论

什么样的按钮,将其添加到导航菜单,还是仅添加通用链接?存档URL通常为yoursite.com/type-slug,除非您将其明确设置为其他名称,例如。 yoursite.com/some-other-url ..

@ t31os:是的,现在,我像这样对它进行了硬编码。但是,很快将使用@Mike的代码对其进行更改。

#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