0

Hello Wordpress Community,

I want to build myself a "recipe of the day" functionality.

I'm looking for a way to mark 3 Custom Post Types per day as "Featured Posts" by a plugin or Cronjob.

The next day 3 new posts will be marked as "Featured".

Is there an easy way to do that, or is there a quick and easy way to do this with functions.php in the Child Theme?

Many thanks already

2
  • Do you want to use native “featured” posts for that? Commented Jan 14, 2019 at 15:42
  • 1
    yes, that would be the easiest way, i guess.
    – Fargho
    Commented Jan 14, 2019 at 15:43

1 Answer 1

1

OK, so first of all you'll need to add your own WP_Schedule event:

add_action( 'wp', function () {
    if (! wp_next_scheduled ( 'mark_posts_as_featured_event' )) {
        wp_schedule_event(time(), 'daily', 'mark_posts_as_featured_event');
    }
} );

function mark_posts_as_featured_event_callback() {
    // if there are sticky posts in our CPT, unstick them
    $sticked_post_ids = get_option( 'sticky_posts' );
    if ( ! empty ) { 
        $old_featured_posts = get_posts( array(
            'post_type' => '<MY_POST_TYPE>',
            'fields' => 'ids',
            'post__in' => $sticked_post_ids,
        ) );

        foreach ( $old_featured_post_ids as $post_id ) {
            unstick_post( $post_id );
        }
    }

    // stick new posts
    // get_random_posts
    $new_featured_post_ids = get_posts( array(
        'post_type' => '<MY_POST_TYPE>',
        'posts_per_page' => 3,
        'orderby' => 'rand',
        'fields' => 'ids',
    ) );

    foreach ( $new_featured_post_ids as $post_id ) {
        stick_post( $post_id );
    } 
}
add_action( 'mark_posts_as_featured_event', 'mark_posts_as_featured_event_callback' );
0

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.