Xem sử dụng mẫu trang WordPress (hoặc không sử dụng)


7

Khi tôi tạo một trang mới trong WordPress, tôi có tùy chọn chỉ định mẫu nào sẽ sử dụng từ chủ đề của mình (từ danh sách thả xuống ở phía bên phải của giao diện).

Tôi cần tìm những mẫu có sẵn nào không được sử dụng để tôi có thể xóa chúng.

Làm thế nào được thực hiện xin vui lòng?

Phiên bản WP là 4.2.2

Câu trả lời:


6

Những gì bạn cần làm là so sánh các giá trị của trường meta _wp_page_template, chứa mẫu trang được chọn cho một trang với các mẫu trang có sẵn.

Đối với điều này, bạn cần xây dựng một loạt các mẫu được sử dụng, bởi vì bạn muốn các mẫu được sử dụng bởi tất cả các trang, tương tự như được hiển thị ở đây:

Sử dụng array_uniqueđể có được các giá trị duy nhất.

Sau đó, bạn cần lấy các mẫu trang có sẵn, như được hiển thị ở đây:

Cuối cùng nhưng không kém phần quan trọng, bạn có thể sử dụng array_diffđể so sánh các mảng của các mẫu được sử dụng và có sẵn, sau đó cung cấp cho bạn các mẫu không sử dụng.


Cảm ơn rất nhiều. Như thế mạnh của tôi nằm trong cơ sở dữ liệu đất đai chứ không phải là PHP, tôi đã sử dụng mã SQL sau để cung cấp một sản lượng tương tự, có thể được tinh chỉnh sau với số lượng, vv SELECT p.post_title as PostTitle, m.meta_value as Template FROM `wp_postmeta` as m join `wp_posts` as p ON p.ID = m.post_id where ((p.post_type = 'page') OR (p.post_type = 'post')) AND (m.meta_key = '_wp_page_template');. Đầu vào của bạn là vô giá để chỉ ra nơi các trường cơ sở dữ liệu chính xác.
EvilDr

1
Hân hạnh! Chắc chắn SQL là một cách quá. Cũng giống như một mẹo chung, khi có sẵn và phù hợp sử dụng các chức năng API của WordPress, nó giúp phát triển WP dễ dàng hơn trong thời gian dài. Tôi đã nói phần của mình :) @EvilDr
Nicolai

3

Cập nhật:

Thông tin sử dụng mẫu trang trong WordPress 4.4+

Trong WordPress 4.4, array_intersect_assoc()đã bị xóa khỏi WP_Theme::get_page_templates()phương thức.

Xem vé # 13265 và thay đổi # 34995 .

Do đó, chúng tôi có thể thêm thông tin sử dụng mẫu trang, trực tiếp vào danh sách thả xuống mẫu , bằng theme_page_templatesbộ lọc, mà không cần sử dụng javascript hoặc một số thủ thuật bộ đệm đối tượng thông minh được giải thích ở đây bởi @MikeSchinkel hoặc ở đây bởi @gmazzap .

Đây là bản demo ( PHP 5.4+ ):

add_filter( 'theme_page_templates', function( $page_templates, $obj, $post )
{
    // Restrict to the post.php loading
    if( ! did_action( 'load-post.php' ) )
        return $page_templates;

    foreach( (array) $page_templates as $key => $template )
    {
        $posts = get_posts( 
            [
                'post_type'      => 'any',
                'post_status'    => 'any', 
                'posts_per_page' => 10,
                'fields'         => 'ids',
                'meta_query'     => [
                    [
                        'key'       => '_wp_page_template',
                        'value'     => $key,
                        'compare'   => '=',
                    ]
                ]
            ]
        );

        $count = count( $posts );

        // Add the count to the template name in the dropdown. Use 10+ for >= 10
        $page_templates[$key] = sprintf( 
            '%s (%s)', 
            $template, 
             $count >= 10 ? '10+' : $count
        );          
    }
    return $page_templates;
}, 10, 3 );

Thí dụ:

Ở đây chúng ta có thể thấy nó trông như thế nào, với thông tin đếm sử dụng được thêm vào tên mẫu:

thông tin sử dụng mẫu

Hy vọng bạn có thể điều chỉnh điều này theo nhu cầu của bạn!


Ý tưởng gọn gàng, gần như không thể vượt qua giới hạn bởi mã lõi - với PHP. Các page_template_dropdown()chức năng cũng không cung cấp khả năng.
Nicolai

Đôi khi, chỉ một dòng mã trong lõi tạo ra sự khác biệt ;-) Javascript có thể là một cách để điều chỉnh thả xuống mẫu hoặc người ta có thể thử preg_replace()đầu ra từ page_attributes_meta_box()để hoán đổi thả xuống hoặc chỉ cần cố gắng mở rộng WP_Themelớp. Hoặc một số cách khác ;-) @ialocin
birgire

Chắc chắn đôi khi nó chỉ là một dòng và đôi khi nó gần như là tất cả :) Và chắc chắn, nơi nào có ý chí sẽ có một cách.
Nicolai

1
hehe và đôi khi chỉ là WordPress ;-)
birgire

Có vẻ như WordPress 4.4 là phiên bản may mắn ;-) @ialocin
birgire
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.