web-dev-qa-db-fra.com

Comment répertorier toutes les pages avec leurs noms de modèles dans un site Web

Je commence à travailler sur un site hérité, qui est devenu assez compliqué. Nous aimerions bien nettoyer les choses. Le site contient 3914 entrées de page et 27 modèles de page différents. Je ne plaisante pas.

Une chose qui aiderait vraiment, et c'est si nous pouvions lister toutes les pages (par titre) AVEC LEUR NOM DE GABARIT ACCOMPAGNANT.

Je connais bien le type de plugins "list all". Tous utilisent la fonction de base WordPress <?php wp_list_pages( $args ); ?> Malheureusement, cette fonction ne donne pas beaucoup de liberté pour sélectionner différents éléments à partir de la page.

Ma tendance est d’évaluer cette fonction essentielle et de recréer mon propre nom, y compris le nom du modèle, ce n’est certainement pas une tâche facile.

Quelqu'un est-il déjà venu ici? Merci beaucoup.

Mise à jour: Basé sur la suggestion de Howdy_McGee, j'ai essayé d'utiliser les fonctions principales de WordPress pour ce faire. Mon code: <?php echo "<ul>"; $query = new WP_Query(); // var_dump($query); while ( $query->have_posts() ) : $query->the_post(); $template_name = get_page_template_slug(); ?> <li>
<?php the_title(); ?> <?php echo " | Template File: ".$template_name; ?> </li> <?php endwhile; ?> </ul>

et ça a été un échec. $query renvoie un ensemble vide. J'ai essayé de comprendre les bons arguments.

Edit # 2: Et puis il y a Alexey répondre. Sensationnel. Non vraiment WOW! Je suis époustouflé par ça. Jamais pensé à aller directement à la base de données. Vous m'avez donné une toute nouvelle approche pour penser à ce genre de choses sur WordPress. Merci beaucoup!

2
zipzit

Pas si difficile que prévu. Essaye ça:

global $wpdb;

$sql = "SELECT post_title, meta_value
  FROM $wpdb->posts a
  JOIN $wpdb->postmeta b ON a.ID = b.post_id
  WHERE a.post_type = 'page'
  AND a.post_status = 'publish'
  AND b.meta_key = '_wp_page_template'
        ";

$pages = $wpdb->get_results($sql);

echo '<pre>';
print_r($pages);
echo '</pre>';
2
Alexey