Modificando o filtro de data na página de administração para o tipo de postagem personalizado para vincular ao campo personalizado

Desculpe se uma pergunta semelhante já foi feita, mas não consigo encontrar a funcionalidade exata que estou procurando.

Basicamente eu tenho um tipo de postagem personalizado (sermões) que tem ‘registrado_date’ como um campo de meta-dados personalizado. O que eu gostaria de fazer é na página de administração de postagem personalizada (onde todas as postagens são mostradas) é alterar a ação do filtro de data existente para filtrar neste campo ‘gravado_date’ e não o post_date como normalmente faz. Eu consegui alterar o menu suspenso do filtro de data usando o seguinte:

add_filter('months_dropdown_results', 'custom_date_dropdown'); function custom_date_dropdown($months){ global $wpdb; $months = $wpdb->get_results("SELECT DISTINCT YEAR( meta_value ) AS year, MONTH(meta_value) AS month FROM wp_postmeta WHERE meta_key = 'recorded_date' ORDER BY meta_value DESC"); return $months; } 

O que funciona perfeitamente. Mas selecionando qualquer valor e filtragem de filtros contra o post_date. Existe de qualquer maneira que eu posso interceptar esse comportamento e mudar a consulta de filtro para minha própria consulta personalizada? Ou eu estou melhor eu remover o filtro e adicionar um personalizado do zero?

Agradeço por qualquer ajuda desde já.

Solutions Collecting From Web of "Modificando o filtro de data na página de administração para o tipo de postagem personalizado para vincular ao campo personalizado"

Use a ação pre_get_posts para replace a consulta padrão. No administrador, uma consulta de data será a consulta var m no formato YYYYMM . Supondo que suas datas de meta sejam armazenadas de acordo com as datas do MySQL ( YYYY-MM-DD ), você pode usar o seguinte:

 function wpse_189824_date_meta_query( $wp_query ) { if ( is_admin() && $wp_query->is_main_query() && $wp_query->get( 'post_type' ) === 'sermons' ) { if ( $m = $wp_query->get( 'm' ) ) { $y = substr( $m, 0, 4 ); // Year $m = substr( $m, 4, 2 ); // Month if ( ! $meta_query = $wp_query->get( 'meta_query' ) ) // Keep meta query if there currently is one $meta_query = array(); // Using LIKE query $meta_query[] = array( 'key' => 'recorded_date', 'value' => "$y-$m-%", 'compare' => 'LIKE', ); /* // OR using DATE $meta_query[] = array( 'key' => 'recorded_date', 'cast' => 'DATE', 'value' => array( "$y-$m-01", "$y-$m-31" ), 'compare' => 'BEWTEEN', ); */ $wp_query->set( 'meta_query', $meta_query ); $wp_query->set( 'm', null ); } } } add_action( 'pre_get_posts', 'wpse_189824_date_meta_query' ); 

Eu dei duas opções ( LIKE ou DATE ), você pode querer testar e ver qual dá o melhor desempenho.