Adicionar / remover a ação do CRON dependendo da variável

Eu liguei uma function para um trabalho CRON chamado 'job_manager_check_for_expired_jobs' , e eu quero que ele seja executado com base no valor de uma variável $create_sitemap . O valor é verdadeiro por padrão, mas pode ser alterado por um filtro.

O problema é que se eu usar o site e, em seguida, alterar o filtro para ser falso mais tarde, o gancho ainda funciona como se a variável fosse verdadeira – então a ação não está sendo removida.

O código que estou usando está aqui, qualquer ajuda será apreciada!

  // Check the WPJM plugin exists if( is_plugin_active( 'wp-job-manager/wp-job-manager.php') ){ // Generate sitemap by default $create_sitemap = true; // Add filter so that users turn off the sitemap generation if they want if( has_filter('sitemap_filter_func') ) { $create_sitemap = apply_filters('sitemap_filter_func', $create_sitemap); } // If we want to ping Google if( $create_sitemap == true ){ // Create the CRON job add_action( 'job_manager_check_for_expired_jobs', 'generate_sitemap' ); } else { // Remove the CRON job to update the sitemap remove_action( 'job_manager_check_for_expired_jobs', 'generate_sitemap' ); } } function generate_sitemap() { $sitemap = ''; $sitemap .= ''; // Get a query of all jobs that are available $all_jobs = new WP_Query( array( 'post_type' => 'job_listing', 'post_status' => 'publish', 'posts_per_page' => -1 ) ); // Add the URL and last modified time (in GMT) to the sitemap foreach( $all_jobs->posts as $post ){ $sitemap .= ''; $sitemap .= '' . get_the_permalink( $post->ID ) . ''; $sitemap .= '' . date( 'c', strtotime( $post->post_modified_gmt ) ) . ''; $sitemap .= ''; } $sitemap .= ''; // Write the sitemap to yoursite.com/job-sitemap.xml $fp = fopen(ABSPATH . 'job-sitemap.xml', 'w'); fwrite($fp, $sitemap); fclose($fp); } 

Exemplo de filtro sendo usado:

 add_filter( 'sitemap_filter_func', 'hide_the_sitemap'); function hide_the_sitemap( $create_sitemap ){ return false; } 

Solutions Collecting From Web of "Adicionar / remover a ação do CRON dependendo da variável"

Não tenho certeza por que o remove_action não está funcionando porque, pelo aspecto do seu código, deveria. Alternativamente, você pode adicionar a lógica condicional ao seu generate_sitemap()

 function generate_sitemap() { global $create_sitemap; if ( $create_sitemap ) return false; $sitemap = '< ?xml version="1.0" encoding="UTF-8"?>'; $sitemap .= ''; // Get a query of all jobs that are available $all_jobs = new WP_Query( array( 'post_type' => 'job_listing', 'post_status' => 'publish', 'posts_per_page' => -1 ) ); // Add the URL and last modified time (in GMT) to the sitemap foreach( $all_jobs->posts as $post ){ $sitemap .= ''; $sitemap .= '' . get_the_permalink( $post->ID ) . ''; $sitemap .= '' . date( 'c', strtotime( $post->post_modified_gmt ) ) . ''; $sitemap .= ''; } $sitemap .= ''; // Write the sitemap to yoursite.com/job-sitemap.xml $fp = fopen(ABSPATH . 'job-sitemap.xml', 'w'); fwrite($fp, $sitemap); fclose($fp); } 

Certifique-se de que $create_sitemap esteja acessível dentro da function.