Consulta de plantilla de página con WP_Query

30 sept 2011, 22:20:18
Vistas: 47.2K
Votos: 21

Me gustaría consultar solo páginas con una determinada plantilla de página usando WP_Query o una función que devuelva el objeto post, pero no puedo encontrar ninguna información sobre esto en el codex oficial.

0
Todas las respuestas a la pregunta 5
2
27

ACTUALIZACIÓN: Esta es una respuesta de hace una década, pensada para una versión muy antigua de WordPress. Veo los comentarios que me informan que esto podría no funcionar en versiones más recientes de WP, por favor consulta las otras respuestas más abajo si la mía no funciona para tu versión de WP. Para WP 2.*, esto funcionará.

Prueba esto... Asumiendo que el nombre de la plantilla es 'my_template.php',

$query = new WP_Query(
    array(
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => 'my_template.php'
    )
);
//Aquí continúa el loop...

También puedes usar get_posts, o modificar query_posts para hacer el trabajo. Ambas funciones usan los mismos parámetros que WP_Query.

1 oct 2011 06:18:16
Comentarios

Esto no está actualizado. Consulta la respuesta de Guille Holmann / BenJam más abajo.

Nadav Nadav
29 mar 2021 13:01:44

Sí, es una respuesta antigua, para una versión antigua de WP. Es muy probable que los componentes internos hayan cambiado. Mi respuesta es de 2011, y las suyas son de 2018/19. ¡Eso es mucha diferencia de tiempo!

Rutwick Gangurde Rutwick Gangurde
9 abr 2021 14:00:04
4
27

Incorrecto: a partir de WordPress 3 necesitas algo similar a:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
18 may 2012 20:12:18
Comentarios

¡¡GRACIAS!! Revisé esta página demasiado rápido, usé la respuesta aceptada. Esto lo soluciona. Para cualquiera más, tenga en cuenta el array dentro del array dentro del array...

Jeremy Carlson Jeremy Carlson
27 abr 2016 01:40:33

La única diferencia aquí es el post_type. Por lo demás, no necesitas el array meta_query para un solo par clave/valor personalizado.

Rutwick Gangurde Rutwick Gangurde
16 nov 2016 08:21:55

Por supuesto que la consulta meta es necesaria. Excepto que podría ser "en línea" con meta_key y meta_value o con un array simple, que podría incluir múltiples condiciones.

Maxime Culea Maxime Culea
14 feb 2020 18:04:38

La respuesta aceptada tiene una década de antigüedad, para una versión anterior. No la hace incorrecta, solo desactualizada para versiones más recientes de WP. He actualizado mi respuesta para especificar esto.

Rutwick Gangurde Rutwick Gangurde
9 abr 2021 14:06:24
0

Si tienes la plantilla dentro de otra carpeta:

$args = array(
    'post_type' => 'page', // ¿es una Página verdad?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // carpeta + nombre de plantilla como está almacenado en la base de datos
        )
    )
);
9 sept 2019 16:05:48
0

La plantilla de página se almacena como un valor meta con la clave "_wp_page_template".

Por lo tanto, todo lo que necesitas es usar esa clave en un parámetro de consulta meta. Por ejemplo:

Consulta http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query#Query_based_on_Custom_Field_and_Sorted_by_Value

y http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

1 oct 2011 05:07:55
0

Si el intento de alguien resulta incorrectamente en cero publicaciones, probablemente el nombre de la plantilla sea incorrecto. Probé con el nombre del archivo php y con el nombre de mi plantilla y no funcionaron. Entonces decidí inspeccionar el cuadro de selección de plantillas donde elegimos la plantilla en el editor de páginas. Encontré esto:

<option value="templates-map/component-tutorial-1.php" 
 selected="selected">Tutorial -1</option>

Usé templates-map/component-tutorial-1.php y funcionó.

5 sept 2018 02:09:14