Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Boleh Membantu Anda dalam Kod PEKERJAAN Cron Ini?
Saya telah mencipta Pekerjaan Cron ini untuk tapak web saya dengan rancangan TV selepas taip,Musim,Episod dan Ia mendapat musim dengan betul, kemudian jananya dan ia telah diterbitkan tetapi apabila tiba masanya untuk musim sedia ada episod datang ia tidak menjana dan menerbitkan? Bolehkah anda membantu saya untuk menyelesaikan masalah ini?
`// Langkah 1: Daftar selang satu minit tersuai untuk ujian
add_filter('cron_schedules', 'custom_one_minute_cron_schedule');
fungsi custom_one_minute_cron_schedule($schedules) {
$schedules['every_minute'] = tatasusunan(
'selang' => 60, // 60 saat
'paparan' => __('Setiap Minit')
);
pulangkan $jadual;
}
// Langkah 2: Jadualkan Kerja Cron untuk Dijalankan Setiap Minit (Untuk tujuan ujian)
jika (!wp_next_scheduled('auto_generate_new_seasons')) {
wp_schedule_event(time(), 'every_minute', 'auto_generate_new_seasons');
}
// Langkah 3: Tentukan Fungsi Panggilan Balik untuk Menjana Musim dan Episod Baharu
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++; } }
}
// Langkah 4: Jana Episod untuk Semusim
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++; }
}
// Langkah 5: Bersihkan dan tetapkan semula jadual kerja cron selepas ujian
add_action('init', function() {
if (defined('WP_DEBUG') && WP_DEBUG) {
// Alih keluar jadual cron sedia ada untuk menetapkan semula
$timestamp = wp_next_scheduled('auto_generate_new_seasons');
jika ($cap masa) {
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'); }
});
`
Atas ialah kandungan terperinci Bagaimana Boleh Membantu Anda dalam Kod PEKERJAAN Cron Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!