Có cách nào để liệt kê tất cả các mẫu WP đã sử dụng / không sử dụng không?


7

Tôi đang làm việc để tối ưu hóa một trang web mà gần đây tôi đã quản lý và có vẻ như có một số mẫu không sử dụng hợp lý. Tôi muốn xóa tất cả các tệp mẫu không sử dụng và dư thừa để chúng tôi có thể tập trung phát triển vào các mẫu mà chúng tôi hỗ trợ, tuy nhiên có hơn 100 trang và bài đăng trên trang web này, vì vậy tôi không thể kiểm tra tại chỗ, tôi cần một truy vấn mạnh mẽ.

Tôi đã thiết lập cách truy vấn mẫu trang nào đang được gọi từ khi tham gia wp_posts và wp_postmeta, và tôi đã nói ra định dạng bài đăng nào đang được sử dụng bằng cách truy vấn wp_posts và wp_terms qua wp_term_relationships NHƯNG ... điều này dường như vẫn chưa nói cho tôi xem index.php đã từng được sử dụng chưa (và tôi không nghĩ là vậy).

Có lẽ tôi đang thiếu một cái gì đó rõ ràng, nhưng có cách nào để xem tập tin chủ đề Wordpress bình thường nào thực sự được gọi không? HOẶC là tôi đã có tất cả thông tin và 'index.php' không được sử dụng.

Bất kì sự trợ giúp nào đều được đánh giá cao!

Cảm ơn


1
Hy vọng phương pháp này có thể giúp đỡ?
bạch dương

Câu trả lời:


5

Đây là một chức năng thô mà tôi sử dụng để xử lý việc này, nó sẽ hoạt động tốt cho bất cứ ai ngoài kia muốn thực hiện việc này nhanh chóng và dễ dàng. Thêm tệp này vào tệp tin.php của bạn và sau đó truy cập trang web của bạn ?template_reportđược thêm vào URL để hiển thị báo cáo cho mọi mẫu chủ đề tùy chỉnh.

Thật khó hiểu, tôi khuyên bạn nên bình luận / bỏ qua add_actioncuộc gọi khi bạn muốn sử dụng nó.

/**
 * 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' );

Đầu ra trông như thế này:

nhập mô tả hình ảnh ở đây


Điều này hoạt động rất độc đáo! Đơn giản và hiệu quả. Cảm ơn bạn.
MiB

1

Không có truy vấn sẽ xác định tất cả các tệp chủ đề đang tích cực sử dụng hoặc không sử dụng. Truy vấn duy nhất tôi biết sẽ xác định một số tệp chủ đề là:

SELECT * FROM wp_postmeta WHERE meta_key = '_wp_page_template';

sẽ xác định tất cả các mẫu Trang tùy chỉnh đang sử dụng. Nó sẽ không xác định các tệp chủ đề tiêu chuẩn, chẳng hạn như index.php, single.php, header.php, footer.php, vì đó không phải là các mẫu Trang tùy chỉnh. Và đó là cách tốt nhất để bao gồm index.php, vì nó là mặc định / dự phòng nếu có vấn đề với các tệp chủ đề cụ thể hơn. Trong nhiều trường hợp, tệp không bao giờ được sử dụng, nhưng nó luôn tốt khi có nó ở đó và nó thường hiển thị cho bạn cấu trúc HTML barebones của trang web, đây có thể là một gợi ý hữu ích trước khi bạn đi sâu vào các tệp tùy chỉnh hơn.

Nếu bạn muốn tiếp tục con đường kỹ thuật đảo ngược, tôi sẽ đề xuất bao gồm mã nhận dạng tệp chủ đề của bạn trong (dưới dạng nhận xét nếu đó là trang web trực tiếp) và tự đi qua từng URL. Nếu bạn sử dụng một plugin tạo sơ đồ trang web XML, nó có thể giúp bạn đảm bảo rằng bạn đạt được mọi URL. Hãy nhớ rằng bất kỳ tập tin nào được xác định có lẽ không phải là tập tin duy nhất được sử dụng. Ví dụ: nếu Bài viết của bạn sử dụng mặc định single.phpthì rất có thể sẽ sử dụng header.phpfooter.phpở mức tối thiểu. Một số chủ đề sử dụng các phần mẫu hoặc bao gồm, vì vậy sau khi bạn có danh sách ban đầu về mẫu bao trùm được sử dụng trên mỗi URL, bạn sẽ phải xem qua từng mẫu đó và xác định tệp nào chúng gọi. Bạn cũng sẽ muốn kiểm trafunctions.php cho các bảng định kiểu và mã JS, cũng như các tiềm năng khác bao gồm.

Một thay thế cho quá trình dài này là xây dựng lại chủ đề từ đầu. Tôi hiểu điều này không phải lúc nào cũng có thể, nhưng nó là giải pháp sạch nhất và có thể sẽ mất ít thời gian hơn và ít rủi ro hơn so với việc cố gắng từ từ loại bỏ các phần của một chủ đề phức tạp cũ. Đối với quy trình này, tôi xác định các mẫu được sử dụng nhiều nhất (nếu bạn có 50 trong số một CPT bắt đầu từ đó) và mã hóa các mẫu đầu tiên trên trang web dev / staging, nhập hoặc sao chép ít nhất một vài loại bài đăng và tiếp tục xây dựng từ đó. Một lần nữa, bạn sẽ cần phải đi qua ít nhất là hầu hết các trang web để đảm bảo bạn không bỏ qua các tùy chỉnh và cách duy nhất bạn sẽ chắc chắn 100% rằng bạn đã nắm bắt mọi thứ là xem xét mọi URL.


0

Thả mã này vào hàm.php và đăng nhập với người dùng có manage_optionskhả năng tạo trang hiển thị các mẫu không sử dụng.

Tôi khuyên bạn không nên xóa index.php vì đây là một phần của Phân cấp Mẫu WP và là mẫu sao lưu cuối cùng cho mọi thứ không có gì khác để sử dụng.

// 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
}

Điều này sẽ tìm thấy các tệp PHP bao trùm, nhưng nó sẽ không tìm thấy các phần mẫu hoặc bao gồm. Ngoài ra, truy vấn thứ hai chỉ xác định các mẫu Trang - nó sẽ không hiển thị cho bạn nơi tiêu đề.php, footer.php, index.php, single.php, v.v. được sử dụng như OP đang yêu cầu.
WebElaine

OP đang yêu cầu tìm các tệp WP Template đã sử dụng / chưa sử dụng, đó chính xác là những gì nó làm. Tìm các phần mẫu và / hoặc bao gồm không phải là một phần của điều này. Lý do OP muốn tìm những thứ này là để loại bỏ các tệp không sử dụng và vì các tệp như index.php, tiêu đề.php không nên bị xóa dù sao đó không phải là vấn đề trong kịch bản này.
Jeffrey von Grumbkow

0

Bạn có thể thu thập dữ liệu toàn bộ trang web và khớp kết quả cho get_included_files()các tệp mẫu của bạn.


-4

Bạn có ý nghĩa như thế này?

$args = array(
    'meta_key' => '_wp_page_template',
    'meta_value' => 'page-special.php'
);

wp_count_posts( $args );

Vui lòng chỉnh sửa câu trả lời của bạn và thêm một lời giải thích: tại sao điều đó có thể giải quyết vấn đề?
fuxia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.