Home >Backend Development >PHP Tutorial >How Can Help You in This Cron JOB Code?

How Can Help You in This Cron JOB Code?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 09:03:12987browse

How Can Help You in This Cron JOB Code?

I have created this Cron Job for my website with postype TVShows,Seasons,Episodes and It correctly get season, then generate it and its been publish but when the time call of its exisiting seasons episodes come it does not generate and publish? Can you any bestie help me out to fix this issue?

`// Step 1: Register a custom one-minute interval for testing
add_filter('cron_schedules', 'custom_one_minute_cron_schedule');
function custom_one_minute_cron_schedule($schedules) {
$schedules['every_minute'] = array(
'interval' => 60, // 60 seconds
'display' => __('Every Minute')
);
return $schedules;
}

// Step 2: Schedule the Cron Job to Run Every Minute (For testing purposes)
if (!wp_next_scheduled('auto_generate_new_seasons')) {
wp_schedule_event(time(), 'every_minute', 'auto_generate_new_seasons');
}

// Step 3: Define the Callback Function to Generate New Seasons and Episodes
add_action('auto_generate_new_seasons', 'generate_new_seasons');
function generate_new_seasons() {
global $wpdb;

// Query to get all TMDb IDs of existing TV shows from post meta
$tmdb_ids = $wpdb->get_col("SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key = 'ids'");

foreach ($tmdb_ids as $tmdb_id) {
    // Check if the TV show exists in the 'tvshows' custom post type
    $tv_show_posts = get_posts(array(
        'post_type' => 'tvshows',
        'meta_key'  => 'ids',
        'meta_value'=> $tmdb_id,
        'posts_per_page' => 1,  // Only need one result
    ));

    // If TV show does not exist, skip to the next TMDb ID
    if (empty($tv_show_posts)) {
        continue;
    }

    // If the TV show is found, process it
    foreach ($tv_show_posts as $post) {
        // First, check if the 'clgnrt' meta is already set to avoid duplicate generation
        $clgnrt = get_post_meta($post->ID, 'clgnrt', true);
        if (!$clgnrt) {
            // Set the 'clgnrt' meta to '1' for the TV show to avoid regenerating it
            update_post_meta($post->ID, 'clgnrt', '1');
        }
    }

    // Now check for and import new seasons for each TMDb ID
    $existing_seasons = $wpdb->get_col($wpdb->prepare(
        "SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id IN (
            SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = 'ids' AND meta_value = %s
        ) AND meta_key = 'temporada'",
        $tmdb_id
    ));

    $season = 1;
    while ($season) {
        // Skip seasons that already exist (duplicate check)
        if (in_array($season, $existing_seasons)) {
            $season++;
            continue;
        }

        // Fetch season data from TMDb API
        $response = wp_remote_get("https://api.themoviedb.org/3/tv/$tmdb_id/season/$season", array(
            'body' => array(
                'api_key' => 'YOUR_TMDB_API_KEY',
                'language' => 'en-US',
                'append_to_response' => 'images'
            )
        ));

        if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
            break;
        }

        $json_tmdb = json_decode(wp_remote_retrieve_body($response), true);

        // If no season data is found, break the loop
        if (!isset($json_tmdb['season_number'])) {
            break;
        }

        // Create a new season post
        $post_data = array(
            'post_status'  => 'publish',
            'post_title'   => $json_tmdb['name'] . ': Season ' . $json_tmdb['season_number'], // Season Title: "Show Name: Season 1"
            'post_content' => $json_tmdb['overview'],
            'post_type'    => 'seasons',
        );

        $post_id = wp_insert_post($post_data);

        if (!is_wp_error($post_id)) {
            // Add meta data for the new season
            add_post_meta($post_id, 'ids', $tmdb_id);
            add_post_meta($post_id, 'temporada', $json_tmdb['season_number']);
            add_post_meta($post_id, 'air_date', $json_tmdb['air_date']);
            add_post_meta($post_id, 'dt_poster', $json_tmdb['poster_path']);

            // Update the 'clgnrt' meta for seasons to avoid regeneration
            update_post_meta($post_id, 'clgnrt', '1');

            // Generate episodes for the new season
            generate_episodes($tmdb_id, $season, $post_id);
        }

        $season++;
    }
}

}

// Step 4: Generate Episodes for a Season
function generate_episodes($tmdb_id, $season_number, $season_post_id) {
global $wpdb;

// Check if the episodes for this season already exist
$existing_episodes = $wpdb->get_col($wpdb->prepare(
    "SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id IN (
        SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = 'temporada' AND meta_value = %s
    ) AND meta_key = 'episodio' ",
    $season_number
));

$episode_number = 1;
while ($episode_number) {
    // Skip episodes that already exist (duplicate check)
    if (in_array($episode_number, $existing_episodes)) {
        $episode_number++;
        continue;
    }

    // Fetch episode data from TMDb API
    $response = wp_remote_get("https://api.themoviedb.org/3/tv/$tmdb_id/season/$season_number/episode/$episode_number", array(
        'body' => array(
            'api_key' => 'YOUR_TMDB_API_KEY',
            'language' => 'en-US',
            'append_to_response' => 'images'
        )
    ));

    if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
        break;
    }

    $json_tmdb = json_decode(wp_remote_retrieve_body($response), true);

    // If no episode data is found, break the loop
    if (!isset($json_tmdb['episode_number'])) {
        break;
    }

    // Create a new episode post
    $post_data = array(
        'post_status'  => 'publish',
        'post_title'   => $json_tmdb['name'] . ' ' . $season_number . 'x' . $episode_number, // Episode Title: "Show Name: 1x1"
        'post_content' => $json_tmdb['overview'],
        'post_type'    => 'episodes',
    );

    $episode_post_id = wp_insert_post($post_data);

    if (!is_wp_error($episode_post_id)) {
        // Add meta data for the new episode
        add_post_meta($episode_post_id, 'ids', $tmdb_id);
        add_post_meta($episode_post_id, 'temporada', $season_number);
        add_post_meta($episode_post_id, 'episodio', $json_tmdb['episode_number']);
        add_post_meta($episode_post_id, 'air_date', $json_tmdb['air_date']);
        add_post_meta($episode_post_id, 'dt_poster', $json_tmdb['still_path']);

        // Update the 'clgnrt' meta for episodes to avoid regeneration
        update_post_meta($episode_post_id, 'clgnrt', '1');
    }

    $episode_number++;
}

}

// Step 5: Clean up and reset cron job schedule after testing
add_action('init', function() {
if (defined('WP_DEBUG') && WP_DEBUG) {
// Remove existing cron schedule to reset it
$timestamp = wp_next_scheduled('auto_generate_new_seasons');
if ($timestamp) {
wp_unschedule_event($timestamp, 'auto_generate_new_seasons');
}
}

// Re-schedule the cron job to run hourly instead of every minute for production
if (!wp_next_scheduled('auto_generate_new_seasons')) {
    wp_schedule_event(time(), 'hourly', 'auto_generate_new_seasons');
}

});
`

The above is the detailed content of How Can Help You in This Cron JOB Code?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn