6

我正在向 Wordpress 添加自定义 post_type,并希望永久链接结构如下所示:

/%post_type%/%year%/%monthnum%/%postname%/

我不知道如何添加日期标签。使用此代码,给了我/my_type/example-post-slug/

register_post_type( 'customtype', array(
    ...other options...
    'rewrite' => array('slug' => 'my_type'),
));

如何包含日期?

4

4 回答 4

2

您可以使用插件Custom Post Type Permalinks来实现这一点。只需安装插件并在设置中更改永久链接格式。

于 2016-05-21T14:35:01.003 回答
1

您需要将 WordPress 结构标签添加到您的rewrite属性中,如下所示:

register_post_type('customtype',array(
    ....
    'rewrite' => array('slug' => 'customtype/%year%/%monthnum%','with_front' => false)
));

然后添加一个post_type_link过滤器来重写自定义帖子的 URL 中的结构标签,以便标签工作:

function custompost_post_type_link($url, $post) {
    if ( 'customtype' == get_post_type($post) ) {
        $url = str_replace( "%year%", get_the_date('Y'), $url );
        $url = str_replace( "%monthnum%", get_the_date('m'), $url );
    }
    return $url;
}
add_filter('post_type_link', 'custompost_post_type_link', 10, 2);

关于创建这样的自定义帖子,您可以参考这篇文章以获取 copypasta 代码(尽管封装在一个类中)。这篇文章还有一些额外的解释和一些额外的功能:https ://blog.terresquall.com/2021/03/making-date-based-permalinks-for-custom-posts-in-wordpress/

编辑:顺便说一句,完成此操作后,您还需要刷新永久链接。

于 2021-04-01T07:35:36.993 回答
0

我找到了一个部分解决方案,它允许在地址栏中加载页面时识别和保留永久链接,但不会在编辑屏幕或网站上帖子的其他链接中更新。将以下内容添加到 functions.php 或特定于站点的插件中,将 example-post-type 替换为您的帖子类型的标识符。

function example_rewrite() {
  add_rewrite_rule('^example-post-type/([0-9]{4})/([0-9]{1,2})/([^/]*)/?','index.php?post_type=example-post-type&year=$matches[1]&monthnum=$matches[2]&name=$matches[3]','top');
}
add_action('init', 'example_rewrite');

这使用了此处记录的 Rewrite API 要查找有关理解该过程的更多提示,请参见此处

要记住的一件事是,无论您如何执行此操作,两个帖子都不可能具有相同的 slug,即使它们具有不同的日期。这是因为如果永久链接方案被更改,它们可能会发生冲突并导致错误。

于 2017-08-31T17:44:59.127 回答
-3

使用它 100% 工作:

'rewrite' => array('slug'=>date('Y').'/'.date('m').'/custom_post_type_slug','with_front'=>true)
于 2015-07-13T15:37:46.203 回答