custom-post-types – Evitar el filtro pre_get_posts en un tipo de publicación específico

Pregunta:

Me encuentro con un problema con el filtro pre_get_post .

De hecho, tengo 4 tipos de publicaciones. Publicación, páginas, eventos y lugar. Creé un campo personalizado llamado ciudad para el tipo de publicación de evento y lugar.

Al crear un campo personalizado, tengo una opción para seleccionar el tipo de publicación en la que quiero mostrar ese campo personalizado.

Ahora, en la parte frontal agregué un filtro en pre_get_posts y modifiqué la consulta principal para obtener todas las publicaciones de una ciudad específica.

Todo funciona perfectamente en eventos y listas de lugares y en una sola página, pero este filtro también se aplica a publicaciones y páginas.

Lo que quiero es ** Quiero eliminar este filtro del tipo de publicación que no se incluye con ese campo personalizado.

He intentado con $ wp_query-> query_vars ['page_id'] este código pero ya no funciona.

¿Alguien puede ayudarme a solucionar este problema?

FYI: Mi código parece,

add_action( 'pre_get_posts', 'citywise_post_filter' );
function citywise_post_filter($query) {
    global $wp_query;
    if( isset( $_REQUEST['city_filter'] ) ){
        $city = $_REQUEST['city_filter'];
    }else{
        $city = $_SESSION['CURR_CITY'];
    }
    if ( !is_admin() ){
        $query->set( 'meta_key', '_ct_selectbox_52f65ae267764' );
        $query->set( 'meta_value', $city );
        return;
    }
}

Gracias, Aezaz

Respuesta:

Mejore su condicional para incluir una verificación del tipo de publicación que se está consultando. Se puede hacer a través del método WP_Query::get

Entonces, donde tienes

if ( !is_admin() ){
    $query->set( 'meta_key', '_ct_selectbox_52f65ae267764' );
    $query->set( 'meta_value', $city );
    return;
} 

reemplazar con

if ( ! is_admin() && in_array ( $query->get('post_type'), array('event','venue') ) ) {
    $query->set( 'meta_key', '_ct_selectbox_52f65ae267764' );
    $query->set( 'meta_value', $city );
    return;
}

También tenga en cuenta que al usar este código, como @offroff señaló en su respuesta, el filtro se aplicará a todas las consultas, las que activó al visitar una página (consulta principal) y las que se activaron a través del código, usando el new WP_Query ($args) ( consultas secundarias).

Para que el filtro de código no afecte las consultas secundarias, agregue una $query->is_main_query() para $query->is_main_query() , de modo que el código se convierta en:

if ( is_admin() || ! $query->is_main_query() ) return;

if ( in_array ( $query->get('post_type'), array('event','venue') ) ) {
    $query->set( 'meta_key', '_ct_selectbox_52f65ae267764' );
    $query->set( 'meta_value', $city );
    return;
}

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım