it-swarm.com.de

Gibt es eine Möglichkeit, alle verwendeten/nicht verwendeten aufzulisten WP Vorlagen?

Ich arbeite an der Optimierung einer Site, deren Verwaltung ich kürzlich übernommen habe, und es scheint mir, dass es ein paar nicht verwendete Vorlagen gibt. Ich möchte alle nicht verwendeten und redundanten Vorlagendateien entfernen, damit wir unsere Entwicklungen auf die von uns unterstützten Vorlagen konzentrieren können. Es gibt jedoch mehr als 100 Seiten und Posts auf dieser Site, sodass ich nicht nur eine Stichprobe durchführen kann eine robuste Abfrage.

Ich habe festgelegt, wie abgefragt werden soll, welche Seitenvorlage von wp_posts und wp_postmeta aufgerufen wird, und ich habe herausgefunden, welche Postformate verwendet werden, indem wp_posts und wp_terms über wp_term_relationships abgefragt werden, ABER ... das scheint immer noch nicht zu sagen mir, ob die index.php jemals benutzt wird (und ich glaube nicht, dass es das ist).

Ich vermisse wahrscheinlich etwas Offensichtliches, aber gibt es eine Möglichkeit zu sehen, welche der normalen Wordpress-Themendateien tatsächlich aufgerufen werden? OR ist es, dass ich bereits alle Informationen habe und 'index.php' einfach nicht verwendet wird.

Jede Hilfe wäre sehr dankbar!

Vielen Dank

7
James T

Hier ist eine grobe Funktion, die ich benutze, um damit umzugehen. Sie sollte für jeden gut funktionieren, der dies schnell und einfach tun möchte. Fügen Sie dies Ihrer functions.php-Datei hinzu und besuchen Sie dann Ihre Site mit ?template_report, der der URL hinzugefügt wurde, um einen Bericht für jede benutzerdefinierte Designvorlage anzuzeigen.

Es ist grob, ich würde vorschlagen, den add_action-Aufruf zu kommentieren/zu kommentieren, wenn Sie ihn verwenden möchten.

/**
 * Theme Template Usage Report
 *
 * Displays a data dump to show you the pages in your WordPress
 * site that are using custom theme templates.
 */
function theme_template_usage_report( $file = false ) {
    if ( ! isset( $_GET['template_report'] ) ) return;

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

    echo '<h1>Page Template Usage Report</h1>';
    echo "<p>This report will show you any pages in your WordPress site that are using one of your theme's custom templates.</p>";

    foreach ( $templates 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> pages are using this template:</p>';
            echo "<ul>";
            foreach ( $q->posts as $p ) {
                echo '<li><a href="' . get_permalink( $p, false ) . '">' . $p->post_title . '</a></li>';
            }
            echo "</ul>";
        } else {
            echo '<p style="color:red">' . $file . ': <strong>0</strong> pages are using this template, you should be able to safely delete it from your theme.</p>';
        }

        foreach ( $q->posts as $p ) {
            $report[$file][$p->ID] = $p->post_title;
        }
    }

    exit;
}
add_action( 'wp', 'theme_template_usage_report' );

Die Ausgabe sieht folgendermaßen aus:

 enter image description here 

4
Kevin Leary

Es gibt keine Abfrage, die alle Designdateien identifiziert, die aktiv verwendet werden oder nicht verwendet werden. Die einzige Abfrage, die ich kenne, um einige Designdateien zu identifizieren, ist:

SELECT * FROM wp_postmeta WHERE meta_key = '_wp_page_template';

hiermit werden alle verwendeten benutzerdefinierten Seitenvorlagen identifiziert. Standard-Themendateien wie index.php, single.php, header.php, footer.php werden nicht identifiziert, da es sich nicht um benutzerdefinierte Seitenvorlagen handelt. Und es ist die beste Vorgehensweise, index.php einzuschließen, da dies ein Standard/Fallback ist, falls jemals ein Problem mit spezifischeren Themendateien auftritt. In vielen Fällen wird die Datei nie verwendet, aber es ist immer gut, sie dort zu haben. In der Regel zeigt sie die Barebones-HTML-Struktur der Site an, was hilfreich sein kann, bevor Sie in individuellere Dateien eintauchen.

Wenn Sie den Reverse-Engineering-Pfad fortsetzen möchten, würde ich vorschlagen, den Code für die ID der Designdatei in (als Kommentar, wenn es sich um eine Live-Site handelt) einzufügen und die einzelnen URLs manuell zu durchsuchen. Wenn Sie ein Plugin verwenden, das eine XML-Sitemap generiert, können Sie sicherstellen, dass Sie auf jede URL zugreifen. Denken Sie daran, dass die identifizierte Datei wahrscheinlich nicht die einzige Datei ist, die verwendet wird. Wenn Ihre Posts beispielsweise den Standard-single.php verwenden, werden sehr wahrscheinlich mindestens header.php und footer.php verwendet. Einige Designs verwenden Vorlagenteile oder -einschlüsse. Nachdem Sie also die anfängliche Liste der in jeder URL verwendeten übergeordneten Vorlagen erstellt haben, müssen Sie in jeder dieser Vorlagen nachsehen, welche Dateien sie aufrufen. Sie sollten auch functions.php auf die in die Warteschlange eingereihten Stylesheets und JS sowie möglicherweise andere Includes prüfen.

Eine Alternative zu diesem langen Prozess besteht darin, das Thema von Grund auf neu aufzubauen. Ich verstehe, dass dies nicht immer möglich ist, aber es ist die sauberste Lösung, und es wird wahrscheinlich weniger Zeit in Anspruch nehmen und weniger riskant sein als der Versuch, Teile eines alten komplexen Themas langsam abzutrennen. Für diesen Prozess identifiziere ich die am häufigsten verwendeten Vorlagen (wenn Sie 50 von einem CPT-Start dort haben) und codiere diese zuerst auf einer Entwicklungs-/Staging-Site, importiere oder kopiere mindestens eine Handvoll von jedem Beitragstyp und baue von dort aus weiter. Wieder einmal müssen Sie mindestens den größten Teil der Website durchgehen, um sicherzustellen, dass Sie die Anpassungen nicht übersehen, und Sie können sich zu 100% sicher sein, dass Sie alles erfasst haben, indem Sie jede URL überprüfen.

1
WebElaine

Sie können die gesamte Site crawlen und die Ergebnisse für get_included_files() Ihren Vorlagendateien zuordnen.

0
Dan Knauss

Löschen Sie diesen Code in functions.php und melden Sie sich mit einem Benutzer an, der über die Funktion manage_options verfügt, um eine Seite mit den nicht verwendeten Vorlagen zu erstellen.

Ich rate davon ab, index.php zu entfernen, da es Teil der WP -Vorlagenhierarchie ist und die allerletzte Sicherungsvorlage für alles ist, was nichts anderes zu verwenden hat.

// Hook into admin_menu
add_action( 'admin_menu', function() {

    // Add submenu page under "Tools" with manage_options capabilities
    add_submenu_page( 'tools.php', 'Page Templates Statistics', 'Page Templates Statistics', 'manage_options', 'page-template-statistics', 'wpse_260813_show_satistics' );
} );

// Function that renders the page added above
function wpse_260813_show_satistics() {

    // Get available templates within active theme
    $available_templates = get_page_templates();

    // Get used templates from database
    global $wpdb;
    $result = $wpdb->get_results(
        "
            SELECT DISTINCT( meta.meta_value ) FROM {$wpdb->prefix}postmeta as meta
            JOIN {$wpdb->prefix}posts as posts ON posts.ID = meta.post_id
            WHERE meta.meta_key LIKE '_wp_page_template'
            AND posts.post_type = 'page'
        "
    );

    $used_templates = array();
    foreach ( $result as $template ) {
        $used_templates[] = $template->meta_value;
    }

    /**
     * Compare available templates against used templates
     * Result is an array with the unused templates
     */
    $unused_templates = array_diff( $available_templates, $used_templates );

    // Draw page to show unused templates
?>
    <div class="wrap">
        <h1>Page Template Statistics</h1>
        The following templates are not being used:
        <table>
            <tr>
                <th>Template name</th>
                <th>Filename</th>
            </tr>
            <?php foreach ( $unused_templates as $name => $file ) : ?>
                <tr>
                    <td><?php echo $name; ?></td>
                    <td><?php echo $file; ?></td>
                </tr>
        <?php endforeach; ?>
        </table>
    </div>
<?php
}