我有一个自定义的post类型,具有以下permalink结构
/%match_season%/%match_team%/%postname%-%year%-%monthnum%-%day%/
%match\\u season%和%match\\u team%是分类法。
post类型包含即将发布的fixture和过去的fixture,并将post title设置为反对派名称,这为我提供了一个很好的url结构。然而,由于每个赛季的球队名称都是一样的,我发现WordPress在永久链接中的%postname%中添加了-2。
我理解为什么WordPress会在永久链接的末尾添加一个数字,如果已经有一个页面/帖子具有相同的slug,但在我的情况下,它没有考虑url中的唯一日期。
我尝试将结构更改为
/%match_season%/%match_team%/%year%-%monthnum%-%day%-%postname%/
但同样的情况也会发生。
有没有办法避免这种情况?感谢您的帮助。
function change_title( $post_id ) {
// Set variables
$opposition = get_field( \'opposition\', $post_id );
$match_date_url = get_the_date( \'Y-m-d\', $post_id );
$match_date_title = get_the_date( \'d/m/y\', $post_id );
// Build post title and permalink
$post_title = $opposition . \' v Team - \' . $match_date_title;
$post_name = $opposition . \' v Team - \' . $match_date_url;
// unhook this function so it doesn\'t loop infinitely
remove_action( \'save_post_matches\', \'change_title\', 10, 3 );
// update the post, which calls save_post again
wp_update_post( array(
\'ID\' => $post_id,
\'post_title\' => $post_title,
\'post_name\' => $post_name,
)
);
// re-hook this function
add_action( \'save_post_matches\', \'change_title\', 10, 3 );
}
add_action( \'save_post_matches\', \'change_title\', 10, 3 );
这几乎就是我所需要的。
如果是一篇新文章,自定义字段不会添加到标题或slug中,但其余字段会添加到标题或slug中。如果更新时存在帖子,则正确更新标题和slug。
有什么明显的东西我遗漏了吗?再次感谢您的帮助。
更新2我想我找到了解决方案。由于上面的代码没有添加ACF自定义帖子类型,我开始四处查看,发现acf/save_post
因此,我现在拥有的代码,似乎对新帖子和帖子更新都有效
function create_title( $post_id ) {
// Set variables
$opposition = get_field( \'opposition\', $post_id );
$match_date_url = get_the_date( \'Y-m-d\', $post_id );
$match_date_title = get_the_date( \'d/m/y\', $post_id );
// Set post title and permalink
$post_title = $opposition . \' v Team - \' . $match_date_title;
$post_name = $opposition . \' v Team - \' . $match_date_url;
// update the post, which calls save_post again
wp_update_post( array(
\'ID\' => $post_id,
\'post_title\' => $post_title,
\'post_name\' => $post_name,
)
);
}
add_action( \'acf/save_post\', \'create_title\', 20 );
希望这能帮助其他人。