我有一个自定义的帖子类型,即。prj
需要自动递增post_title
(标题)和post_name
(slug)在post保存时,无论post状态如何更新。。这篇文章永远不会被删除,这就是为什么它不会成为一个问题。。
需要它的行为就像SQL中的自动增量字段一样。。一旦分配了ID,就不应该复制它。。
到目前为止,我已经访问了下面提到的代码。。但问题是,它只是设置了帖子标题,而不是slug,而且增量功能也不起作用。。
add_filter( \'wp_insert_post_data\' , \'odin_prj_title\' , \'99\', 2 );
function odin_prj_title( $data , $postarr )
{
if( $data[\'post_type\'] == \'prj\' ) {
$last_post = wp_get_recent_posts( \'1\');
$last_post_ID = (int)$last_post[\'0\'][\'ID\'];
$data[\'post_title\'] = \'P0\' . ($last_post_ID + 1);
}
return $data;
}
最合适的回答,由SO网友:Hassan Alvi 整理而成
我发现使用wp_count_posts
函数,我可以在运行时获取最后的帖子总数并保存标题!还添加了一些条件。。
add_filter( \'wp_insert_post_data\' , \'odin_prj_title\' , 10, 2 );
function odin_prj_title( $data , $postarr )
{
if( $data[\'post_type\'] == \'prj\' && $data[\'post_status\'] != \'publish\' ) {
$count_posts = wp_count_posts(\'prj\');
$published_posts = $count_posts->publish;
$data[\'post_title\'] = \'P0\' . ($published_posts + 1);
}
return $data;
}
SO网友:Magnetize
我没有使用save\\u post或任何其他save过滤器来解决这个问题,所以我只需要对标题执行相同的操作,我使用了default_title
滤器这意味着它也适用于草稿。
add_filter( \'default_title\', \'change_title\', 10, 2 );
function change_title( $title, $post ) {
return \'PO\' . $post->ID;
}
请注意,这里我使用的是新创建的post的ID,因此我不必像您那样获取$last\\u post\\u ID,如果您这样做,也许您也不必这样做。记住在更改标题之前检查帖子类型。
我还没有测试过对slug执行同样的操作,但我注意到有一个类似的slug过滤器,名为wp_unique_post_slug
. 希望这会对您有所帮助。:)
编辑:这是来自WP核心代码的过滤器,https://developer.wordpress.org/reference/functions/wp_unique_post_slug/