Filtrar publicaciones por metadatos de publicación

8

Quiero filtrar las publicaciones de tal manera que solo get_post_meta($post->ID, "project_cat", true)se muestren las publicaciones, para las cuales (devuelve una ID de publicación) es igual a mi valor especificado.

Alguna forma de hacer esto?

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

porton
fuente
El 56% es bastante bajo; recuerde volver a sus preguntas anteriores y aceptar las respuestas correctas. Los saca del montón 'sin respuesta' y ayuda a otros a encontrar soluciones más fácilmente. Las personas también estarán más dispuestas a ofrecer respuestas si saben que el OP les responderá. :)
Stephen Harris
Vea mi respuesta a continuación. No está claro cuándo / dónde desea filtrar las publicaciones. Si actualiza su respuesta para incluir esto, puedo sugerir qué 'condicionales' necesita verificar. Alternativamente, vea el ejemplo de query_post vinculado. El principio general es el mismo: establecer el meta_queryvalor.
Stephen Harris

Respuestas:

11

El WP_Queryobjeto acepta un metaargumento posterior. En términos generales, desea hacer lo siguiente:

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

        // Other query properties
    ) 
  );

Donde 'my-value' es su 'valor especificado'.

Ejemplo de uso:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Check this is main query and other conditionals as needed
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

Ver WP_Query , pre_get_posts . Todos los condicionales están disponibles para usted. Actualmente, esto se ejecuta en cada consulta principal, que probablemente no desee.

Alternativamente, puede 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.

Stephen Harris
fuente
@TahirYasin: ver el códice .
Stephen Harris el