在保存/发布之前更改帖子的类别

时间:2019-04-30 11:33:21

标签: php wordpress customization

用户创建一个新的标准帖子。如果他忘记添加他的类别,我希望我的脚本为他添加。
为了对此进行测试,我首先要更改“测试”类别中所有不匹配的帖子类别。

postslist <- posts("list", thread=arts$id)

很遗憾,此脚本目前停止了所有发布和更改。

编辑:设置中未使用默认选项的原因:我想稍后由其他角色替换测试。

2 个答案:

答案 0 :(得分:0)

如果未选择标准帖子,如何将帖子类别设置为“测试”

要执行此操作,只有当它是标准帖子并且在保存帖子时尚未获得类别时,我们才必须获取当前帖子ID并更新类别。

<?php function set_default_category($post_ID){

    if(wp_is_post_autosave($post_ID) || wp_is_post_revision($post_ID)) {
        return;
    } //If this is just an autosave or post revision, don't do anything

    $postFormat = get_post_format( $post_ID ); //Get the post format of current post

    if( !empty( $postFormat ) ) {
        return;
    } //If post is not a standard format, don't do anything

    $currentCat = get_the_category(); //Get the current set Category
    $defaultCat = get_cat_ID( "test" ); //Get ID of "test" category

    if( empty( $currentCat ) ) { //Check if category is set
        wp_set_post_categories( $post_ID, $defaultCat );  //Set the current post ID's Category to "test"
    }

} add_action('save_post', 'set_default_category');?>

此功能尚未经过测试,但理论上应该可行。让我知道您遇到的任何错误(如果没有),我可以进行修改。

答案 1 :(得分:0)

我认为post_category中的wp_insert_post_data应该是数组。检查文档https://developer.wordpress.org/reference/functions/wp_insert_post/

function book_save( $data, $postarr ) {
    // check what we save before changes
    if ( ! isset($_POST['post_type']) || $_POST['post_type'] != 'post' ) return $data;
    if ( get_current_screen()->id != 'post' ) return $data;
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return $data;
    if ( ! current_user_can('edit_post', $postarr['ID'] ) ) return $data;

    // all ok let's check post category
    if ( empty($data['post_category']) ) {
        $data['post_category'] = array(12, 20); // array with category IDs
    }

    return $data;
}
add_action('wp_insert_post_data', 'book_save', 20, 2 );