modificando meta_query en parse_query

2

En el enganche de filtro parse_query que estoy haciendo:

if ( is_admin() && $pagenow == 'edit.php' && isset( $_GET['ysr_homepage_filter'] ) && $_GET['ysr_homepage_filter'] == '1' ) {
        if ( ! $query->meta_query ) {
            $query->meta_query = new WP_Meta_Query( [
                [
                    'key'     => 'ysr_home_sticky',
                    'value'   => '1',
                    'compare' => '='
                ]
            ] );
        }
    }

para tratar de filtrar por un meta en particular en la lista del panel de control para un tipo de publicación personalizada en particular.

El campo personalizado es el correcto, y lo estoy buscando con éxito en otras WP_Queries, pero aparentemente lo que estoy haciendo aquí no es la forma correcta de hacer las cosas, ya que mis resultados no se ven afectados. El código se ejecuta correctamente y puedo ver que $ query- > meta_query está configurado para mi nuevo WP_Meta_Query, pero no parece importar.

¿Alguna pista sobre lo que estoy haciendo mal? ¿Hay un gancho diferente en el que me esté enganchando? ¿Una forma diferente de crear la nueva meta consulta para el objeto de consulta existente?

Gracias de antemano.

    
pregunta yivi 04.02.2015 - 11:54

1 respuesta

5

Inmediatamente después de que se haya activado el enlace pre_get_posts , el atributo público meta_query de WP_Query se anula con:

$this->meta_query = new WP_Meta_Query(); 
$this->meta_query->parse_query_vars( $q );

donde

$q = &$this->query_vars;
$q = $this->fill_query_vars($q);

Así que no creo que funcione para modificar este atributo, como intentas hacer, antes de que se active el pre_get_posts hook.

En su lugar, debemos pasar los argumentos meta_query a través de la parte query_vars de WP_Query .

Así que intenta, por ejemplo, esto en su lugar:

if ( ! $query->get( 'meta_query' ) {
    $query->set( 'meta_query', [
        [
            'key'     => 'ysr_home_sticky',
            'value'   => '1',
            'compare' => '='
        ]
    ] );
}
    
respondido por el birgire 04.02.2015 - 12:40

Lea otras preguntas en las etiquetas