Filtrado de entradas por metadatos de entrada

10 abr 2012, 18:52:17
Vistas: 26.5K
Votos: 9

Quiero filtrar entradas de tal manera que solo se muestren aquellas donde get_post_meta($post->ID, "project_cat", true) (que devuelve un ID de entrada) sea igual a mi valor especificado.

¿Hay alguna forma de hacer esto?

Estoy especialmente interesado en formas de hacerlo compatible con el plugin WP-Paginate.

Here's a code example that shows how to do this:
// Modificar la consulta principal antes de que se ejecute
add_action('pre_get_posts', function($query) {
    // Asegurarse de que solo se modifica la consulta principal en el front-end
    if (!is_admin() && $query->is_main_query()) {
        // Agregar metadatos personalizados a la consulta
        $meta_query = array(
            array(
                'key' => 'project_cat',
                'value' => 'tu_valor_especificado',
                'compare' => '='
            )
        );
        $query->set('meta_query', $meta_query);
    }
});
2
Comentarios

56% es bastante bajo - por favor recuerda volver a tus preguntas anteriores y aceptar las respuestas correctas. Esto las quita de la pila de 'no respondidas' y ayuda a otros a encontrar soluciones más fácilmente. La gente también estará más dispuesta a ofrecer respuestas si saben que el autor original les responderá. :)

Stephen Harris Stephen Harris
10 abr 2012 18:58:34

Mira mi respuesta abajo. No está claro cuándo/dónde quieres filtrar las publicaciones. Si actualizas tu respuesta para incluir esto, puedo sugerirte qué 'condicionales' necesitas verificar. Alternativamente, mira el ejemplo de query_post vinculado. El principio general es el mismo - estableciendo el valor de meta_query.

Stephen Harris Stephen Harris
10 abr 2012 19:24:46
Todas las respuestas a la pregunta 1
1
11

El objeto WP_Query acepta un argumento de meta datos de publicación. Generalmente querrás hacer lo siguiente:

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'mi-valor',
        )
      ),

        // Otras propiedades de la consulta
    ) 
  );

Donde 'mi-valor' es tu 'valor especificado'.

Ejemplo de uso:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Verifica que sea la consulta principal y otras condicionales según sea necesario
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'mi-valor'
            )
          )
        );
    }

  }

Consulta WP_Query, pre_get_posts. Todas las condicionales están disponibles. Actualmente esto se ejecuta en cada consulta principal - lo cual probablemente no quieras.

Alternativamente puedes usar query_posts (una forma más simple pero mucho menos eficiente) para alterar la consulta solo para una instancia específica en una plantilla.

10 abr 2012 19:23:07
Comentarios

@TahirYasin - consulta el codex.

Stephen Harris Stephen Harris
12 sept 2013 11:50:24