我需要在帖子中检索一个ACF字段,并在保存到数据库之前更改帖子的slug(permalink)。实现这一目标的方法是什么?我需要在每次创建/编辑post操作时更改slug。
在POST保存之前重写POST Slug
2 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成
以下内容更多地被视为概念验证,而不是一个可复制/粘贴的解决方案<话虽如此,你应该这样做:
这个save_post
action 每当更新或创建帖子时运行。您可以使用add_action
.
因此,您的案例必须如下所示:
// initial hook
add_action( \'save_post\', \'wpse105926_save_post_callback\' );
function wpse105926_save_post_callback( $post_id ) {
// verify post is not a revision
if ( ! wp_is_post_revision( $post_id ) ) {
// unhook this function to prevent infinite looping
remove_action( \'save_post\', \'wpse105926_save_post_callback\' );
// update the post slug
wp_update_post( array(
\'ID\' => $post_id,
\'post_name\' => \'some-new-slug\' // do your thing here
));
// re-hook this function
add_action( \'save_post\', \'wpse105926_save_post_callback\' );
}
}
上面可能有点混乱的是,从它内部取消和重新调出函数。这是必需的,因为我们调用wp_update_post
更新slug,从而触发save_post
要再次运行的操作。另外,如果希望WP根据帖子标题自动生成新的slug,只需传递一个空字符串:
wp_update_post( array(
\'ID\' => $post_id,
\'post_name\' => \'\' // slug will be generated by WP based on post title
));
SO网友:IvanRF
我需要同样的东西,只是为了后期创作。
我实现了solution here (这一个已准备好复制/粘贴)。
只需删除检查两个日期是否相等的行,它也会为编辑操作更新slug。然而,我不建议这样做,因为它会改变帖子的URL,这对SEO不好,尤其是断开的链接(404)。
结束