问题描述

当我在 WordPress 中创建一个新页面时,我可以选择从主题 (从接口的 right-hand 侧的下拉列表) 中指定使用哪个模板。

我需要找到哪些可用的模板是未使用的,以便我可以删除它们。

请问这怎么办?

WP 版本是 4.2.2

最佳解决方案

您需要做的是比较元字段_wp_page_template 的值,其中包含为单个页面选择的页面模板与可用的页面模板。

为此,您需要构造一个已使用模板的数组,因为您需要所有页面使用的模板,如下所示:

使用 array_unique 获取唯一的值。

然后,您需要获取可用的页面模板,如下所示:

最后但并非最不重要的是,您可以使用 array_diff 比较已使用和可用模板的数组,随后将为您提供未使用的模板。

次佳解决方案

更新:

WordPress 4.4+中的页面模板使用信息

在 WordPress 4.4 中,array_intersect_assoc()已从 WP_Theme::get_page_templates()方法中删除。

参见 #13265#34995 的更改。

因此,我们可以使用 theme_page_templates 过滤器直接在模板下拉列表中添加页面模板使用信息,而不使用 JavaScript 或一些聪明的对象缓存技巧来解释 here by @MikeSchinkelhere by @gmazzap

这是一个演示 (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 );

例:

在这里我们可以看到它的外观如何,将使用计数信息添加到模板名称中:

希望可以根据您的需要调整

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。