检查WordPress主题是否支持侧边栏



我有一个名为movies的自定义帖子类型,它具有用于单个帖子类型页面的模板。我正在使用以下筛选器创建单页模板。

add_filter('single_template', 'set_single_movie_template', 10, 1);
function set_single_movie_template($single_template){
global $post;
if ('movies' === $post->post_type) {
$single_template = MOVIE_CPT_TEMPLATES.'/single-movie.php';
}
return $single_template;
}

这是我的帖子类型单页模板

if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
get_header();
while ( have_posts() ) :
the_post();
get_movie_template_part( 'content', 'single-movie' );
endwhile; // end of the loop.
do_action( 'movies_sidebar' );
get_footer();

问题是我正在调用movies_sidebar操作挂钩中的主题侧边栏,如下所示。

add_action('movie_sidebar', 'get_sidebar_template');
function get_sidebar_template(){
get_movie_template('global/sidebar.php');
}

这会调用我插件中名为global的文件夹中的模板文件。上述模板文件sidebar.php包含以下内容。

if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
get_sidebar();

错误

这在许多主题中都很好。但是在二十一和二十主题(没有侧边栏的主题(中,我得到了一个错误

已弃用:不带边栏的主题.php自版本以来已弃用3.0.0,没有其他选择。请在您的主题中包含一个sidebar.php模板

在过去的一整天里,我一直在努力解决这个问题。据我所查,上述主题中没有sidebar.php文件,因此出现了错误。

当前解决方案

我用主题名称创建了一个自定义条件,这样只有当活动主题位于支持侧边栏的主题名称数组中时,才会调用get_sidebar()。当我遇到一个不支持侧边栏的主题时,我仍然必须将主题名称添加到列表中。

这个问题有什么解决办法吗?

语句

这不是错误,而是一条不推荐使用的消息。

有些WordPress主题不包括sidebar.php模板文件,正如消息所说,该文件已被弃用,但这不是问题,因为如果在主题中找不到,它将加载/wp-includes/theme-compat/sidebar.php文件。

因此,这不是一个需要解决或可以解决的问题,因为它不是一个错误,也不是一个未解决的问题。

此消息包含在WordPress核心/wp-includes/theme-compat/sidebar.php回退文件中,以实现向后兼容性。这就是解决方案,他们制定了解决方案,只是在其中添加了一条不推荐使用的消息

由于存在回退解决方案,因此不需要检查主题中是否存在sidebar.php

解决方案

仅当启用了WP_DEBUG时,此不推荐使用的消息才可见。因此,在wp-config.php文件中禁用WP_DEBUG的生产网站上,此消息将不可见:

define( 'WP_DEBUG', false );

但是还有其他方法可以禁用这个不推荐使用的文件消息:

add_action( 'deprecated_file_trigger_error', '__return_false' );

但是,如果你正在开发一个产品(比如其他用户使用的WordPress插件(,就不要使用这个add_action解决方案。如果您想禁用该消息,请仅将其用于您自己的网站。

但正如我所写的,这不是一个你必须解决的问题。

最新更新