gpt4 book ai didi

php - 自定义帖子类型的日期存档

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:21 26 4
gpt4 key购买 nike

我已经看到很多关于此的问题/帖子,但尚未找到合适的解决方案。基本上我正在尝试做 wp_get_archives 所做的事情,但是对于自定义帖子类型(我个人不确定为什么 wp_get_archives 不支持自定义帖子类型!)。

我目前使用的代码如下

函数.php

function Cpt_getarchives_where_filter( $where , $r ) {
$post_type = 'events';
return str_replace( "post_type = 'post'" , "post_type = '$post_type'" , $where );
}

sidebar-events.php

add_filter( 'getarchives_where' , 'Cpt_getarchives_where_filter' , 10 , 2 );
wp_get_archives();
remove_filter('getarchives_where' , 'Cpt_getarchives_where_filter' , 10 );

此代码显示日期(例如 2014 年 4 月、2014 年 3 月)等,这很好,但是单击链接只会转到 404。在每个日期链接上创建的 URL 是/2014/04/,但是它应该类似于/events/2014/04/。

是否有任何方法可以在 URL 中包含“事件”以便可以使用 archive-events.php 模板,是否有任何原因导致链接当前生成 404?

非常感谢您的帮助

最佳答案

网上有很多类似你的例子,但问题是虽然wp_get_archive()会创建一个自定义帖子类型的列表,链接仍然指向默认的帖子类型。这是因为 Wordpress 不会为自定义帖子类型的存档生成重写规则,您必须手动创建它们。下面是一个示例,说明如何为年、月和日归档生成规则。它还展示了如何使用 get_archives_link 过滤器转换链接。请务必将 'has_archive' => true 添加到 register_post_type() 参数数组,并通过访问 settings->permalinks 刷新重写规则> 管理页面。

函数.php

add_filter( 'getarchives_where', 'getarchives_where_filter', 10, 2 );
add_filter( 'generate_rewrite_rules', 'generate_events_rewrite_rules' );

function getarchives_where_filter( $where, $args ) {

if ( isset($args['post_type']) ) {
$where = "WHERE post_type = '$args[post_type]' AND post_status = 'publish'";
}

return $where;
}

function generate_events_rewrite_rules( $wp_rewrite ) {

$event_rules = array(
'events/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$' => 'index.php?post_type=events&year=$matches[1]&monthnum=$matches[2]&day=$matches[3]',
'events/([0-9]{4})/([0-9]{1,2})/?$' => 'index.php?post_type=events&year=$matches[1]&monthnum=$matches[2]',
'events/([0-9]{4})/?$' => 'index.php?post_type=events&year=$matches[1]'
);

$wp_rewrite->rules = $event_rules + $wp_rewrite->rules;
}

function get_archives_events_link( $link ) {

return str_replace( get_site_url(), get_site_url() . '/events', $link );

};

sidebar.php 示例

add_filter( 'get_archives_link', 'get_archives_events_link', 10, 2 );

wp_get_archives( array( 'post_type' => 'events' ) );
wp_get_archives( array( 'post_type' => 'events', 'type' => 'yearly' ) );
wp_get_archives( array( 'post_type' => 'events', 'type' => 'monthly' ) );
wp_get_archives( array( 'post_type' => 'events', 'type' => 'daily' ) );

remove_filter( 'get_archives_link', 'get_archives_events_link', 10, 2 );

关于php - 自定义帖子类型的日期存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23386709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com