Consulta de plantilla de página con WP_Query

14

Me gustaría consultar solo páginas con una determinada plantilla de página WP_Queryo una función que devolvería el objeto de publicación, pero no puedo encontrar ninguna información al respecto en el códice oficial.

Alexandre Kirszenberg
fuente

Respuestas:

23

Pruebe esto ... Suponiendo 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'
    )
);
//Down goes the loop...

También puede usar get_posts o modificar publicaciones de consultas para realizar el trabajo. Ambas funciones usan los mismos parámetros que WP_Query .

Rutwick Gangurde
fuente
20

Incorrecto: a partir de wordpress 3 necesitas algo parecido a:

$args = array(
    'post_type'  => 'page', 
    'meta_query' => array( 
        array(
            'key'   => '_wp_page_template', 
            'value' => 'my_template.php'
        )
    )
);
BenJam
fuente
¡¡GRACIAS!! Hojeé esta página demasiado rápido, usé la respuesta aceptada. Esto lo hace. Para cualquier otra persona, tenga en cuenta la matriz dentro de la matriz dentro de la matriz ...
Jeremy Carlson
3
La única diferencia aquí es la post_type. De lo contrario, no necesita la meta_querymatriz para un solo par clave / valor personalizado.
Rutwick Gangurde
Por supuesto, se necesita la meta consulta. Excepto que podría ser "en línea" con meta_keyy meta_valueo con una matriz simple, que podría incluir varias condiciones.
Maxime Culea
0

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

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

Solía templates-map/component-tutorial-1.phpy funcionó.

Ivan Gomes
fuente
0

Si tiene la plantilla dentro de otra carpeta:

$args = array(
    'post_type' => 'page', //it is a Page right?
    'post_status' => 'publish',   
    'meta_query' => array(
        array(
            'key' => '_wp_page_template',
            'value' => 'page-templates/template-name.php', // folder + template name as stored in the dB
        )
    )
);
Guille Holmann
fuente