0

I have a ACF date picker that currently changes the post status from “Publish” to “Draft. Yet I am also trying to change the post category. If anyone can point me in the right direction, that would be most appreciated.

    if ($expireTransient = get_transient($post->ID) === false) {
    set_transient($post->ID, 'set for 1 minutes', 1 * MINUTE_IN_SECONDS );
    $today = date('Y-m-d H:i:s', current_time('timestamp', 0));
    $args = array(
        'post_type' => 'post',
        'category_name' => '',
        'posts_per_page' => 200,
        'post_status' => 'publish',
        'meta_query' => array(
            array(
                'key' => 'end_date_time', // ACF field name 
                'value' => $today,
                'compare' => '<='
            )
        )
    );

    $posts = get_posts($args);
   
    foreach( $posts as $post ) {
        if(get_field('end_date_time', $post->ID)) {
     
            $postdata = array(
                'ID' => $post->ID,
                'category_name' => 'premium', // Change category name slug here?
                'post_status' => 'draft'
            );      

            wp_update_post($postdata); 
        }
    }
}

1 Answer 1

0

Looks like I found the issue. In order to change the category of a post , you cannot use wp_udpate_post() to do so. Instead I used wp_set_post_categories(); Also wanted to note that these are categories that I created in the meta box that is displayed in the post edit page.

if ($expireTransient = get_transient($post->ID) === false) {
    set_transient($post->ID, 'set for 1 minutes', 1 * MINUTE_IN_SECONDS );
    $today = date('Y-m-d H:i:s', current_time('timestamp', 0));
    $args = array(
        // 'category_name' => '',
        'post_type' => 'post',
        'posts_per_page' => 200,
        'post_status' => 'publish',
        'meta_query' => array(
            array(
                'key' => 'end_date_time',
                'value' => $today,
                'compare' => '<='
            )
        )
    );
    $posts = get_posts($args);
    foreach( $posts as $post ) {
        if(get_field('end_date_time', $post->ID)) {
     
            $postdata = array(
       
                'ID' => $post->ID,
                'post_status' => 'draft'
            );

            // Added Code 
            $post_id = $post->ID;

            wp_set_post_categories( $post_id, array(13003), $append ); // id of category in array. 

            wp_update_post($postdata); 
        }
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.