Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann Ihnen dieser Cron-JOB-Code helfen?

Wie kann Ihnen dieser Cron-JOB-Code helfen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 09:03:121027Durchsuche

How Can Help You in This Cron JOB Code?

Ich habe diesen Cron-Job für meine Website mit dem Posttyp „TVShows, Staffeln, Episoden“ erstellt. Er erhält korrekt die Staffel, generiert sie dann und wird veröffentlicht, aber wenn die Zeit für die vorhandenen Staffeln abruft Episoden kommen, es lässt sich nicht generieren und veröffentlichen? Kann mir irgendein Freund helfen, dieses Problem zu beheben?

`// Schritt 1: Registrieren Sie ein benutzerdefiniertes Ein-Minuten-Intervall zum Testen
add_filter('cron_schedules', 'custom_one_minute_cron_schedule');
Funktion custom_one_minute_cron_schedule($schedules) {
$schedules['every_minute'] = array(
'Intervall' => 60, // 60 Sekunden
'display' => __('Jede Minute')
);
return $schedules;
}

// Schritt 2: Planen Sie den Cron-Job so, dass er jede Minute ausgeführt wird (zu Testzwecken)
if (!wp_next_scheduled('auto_generate_new_seasons')) {
wp_schedule_event(time(), 'every_minute', 'auto_generate_new_seasons');
}

// Schritt 3: Definieren Sie die Rückruffunktion, um neue Staffeln und Episoden zu generieren
add_action('auto_generate_new_seasons', 'generate_new_seasons');
Funktion generic_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++;
    }
}

}

// Schritt 4: Episoden für eine Staffel generieren
Funktion generic_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++;
}

}

// Schritt 5: Cronjob-Zeitplan nach dem Test bereinigen und zurücksetzen
add_action('init', function() {
if (definiert('WP_DEBUG') && WP_DEBUG) {
// Vorhandenen Cron-Zeitplan entfernen, um ihn zurückzusetzen
$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');
}

});
`

Das obige ist der detaillierte Inhalt vonWie kann Ihnen dieser Cron-JOB-Code helfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn