WordPress: Použité šablony

Pro webové stránky je nezřídka potřebné připravit několik variant šablony, například pro „landing page“, jež nemá navigaci a používá zjednodušenou patičku. Občas se mi hodí i trochu jiná varianta pro domovskou stránku a stránky fungující jako „rozcestníky“.

Může však nastat moment, kdy je potřebné něco změnit a hodí se seznam, kdy tvůrce obsahu použil některé z variant šablon.

K výsledku je snadné se dopátrat přímo v databázi:

SELECT 
  `t1`.`id`,
  `t1`.`post_title`,
  `t1`.`post_status`,
  `t1`.`post_type`,
  `t2`.`meta_value`
FROM
  `wp_posts` AS `t1`
  LEFT JOIN `wp_postmeta` AS `t2`
  ON `t1`.`id`=`t2`.`post_id`
WHERE
  `t2`.`meta_key` = '_wp_page_template'
  AND `t2`.`meta_value`<>'default';

Pokud nechcete číst výsledky SQL dotazu, ale chcete trochu přehlednější formu, můžete si do souboru functions.php, v odvozené šabloně, přidat krátký kousek kódu, jehož výstup získáte doplněním adresy webu o parametr ?used_temps (např: example.com/?used_temps ).

add_action( 'wp', function ( $file = false ) {
    if ( ! isset( $_GET['used_temps'] ) ) return;

	$temps = wp_get_theme()->get_page_templates();
	$report = array();

	echo '<h1>Seznam šablony</h1>';
	echo "<h2>Seznam využitých šablon:</h2>";

    foreach ( $temps as $file => $name ) {
        $q = new WP_Query( array(
            'post_type' => 'page',
            'posts_per_page' => -1,
            'meta_query' => array( array(
                'key' => '_wp_page_template',
                'value' => $file
            ) )
        ) );

        $page_count = sizeof( $q->posts );

        if ( $page_count > 0 ) {
            echo '<p style="color:green">' . $file . ': <strong>' . sizeof( $q->posts ) . '</strong> stránky, které ji používají:</p>';
            echo "<ul>";
            foreach ( $q->posts as $p ) {
                echo '<li><a href="' . get_permalink( $p, false ) . '">' . $p->post_title . '</a></li>';
            }
            echo "</ul>";
			unset($temps[$file]);
        }
        foreach ( $q->posts as $p ) {
            $report[$file][$p->ID] = $p->post_title;
        }

    }
	
	if(count($temps) > 0) {
		echo('<h2>Nevyužité šablony (Zatím? Smazat?)</h2>');
		echo('<ul>');
		foreach ( $temps as $file => $name ) {
			echo '<li style="color:red">' . $file . '</li>';
		}
		echo('</ul>');
	}

    exit;
} );

Funkci přidávám do scriptu functions.php jen dočasně. Nenechal bych ji trvale na stránkách zákazníka.

Tento sniplet mám v archivu delší dobu, není z mé hlavy, ale bohužel nejsem schopen odkázat na původní zdroj.