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

  • Do you want to use native “featured” posts for that? – Krzysiek Dróżdż Jan 14 at 15:42
  • 1
    yes, that would be the easiest way, i guess. – Fargho Jan 14 at 15:43
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' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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