如何自动增加帖子标题和帖子插件字段?

时间:2018-03-02 作者:Hassan Alvi

我有一个自定义的帖子类型,即。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;
}

2 个回复
最合适的回答,由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/

结束

相关推荐