问题描述
当我在 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()
方法中删除。
因此,我们可以使用 theme_page_templates
过滤器直接在模板下拉列表中添加页面模板使用信息,而不使用 JavaScript 或一些聪明的对象缓存技巧来解释 here by @MikeSchinkel 或 here 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。