Filtrado de entradas por metadatos de entrada
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);
}
});

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.

@TahirYasin - consulta el codex.
