挂钩到主题切换晚于`Setup_Theme`

时间:2018-08-17 作者:indextwo

我需要添加一个主题切换逻辑到一个网站。不幸的是,我所尝试的似乎并没有按要求发挥作用。

主题需要根据用户是否在网站的博客部分进行切换(例如。is_single(), is_category(), get_post_type() == \'post\'), 相对于任何其他部分(例如。is_shop(), is_page(), 等等)

不幸的是,创建了一个插件来实现这一点,似乎在我唯一可行的地方,这些条件都不可用:setup_theme.

具有以下功能:

function vnmFunctionality_getTheme() {

    $isBlog = (is_author() || is_category() || is_tag() || is_date() || is_home() || is_single()) && \'post\' == get_post_type();

    if ($isBlog) {
        return \'blog-theme\';
    } else {
        return \'site-theme\';
    }
}

function vnmFunctionality_conditionalThemeSwitch() {
    if (is_admin()) {
        return;
    }

    add_filter(\'template\', \'vnmFunctionality_getTheme\');
    add_filter(\'stylesheet\', \'vnmFunctionality_getTheme\');
}

add_action(\'setup_theme\', \'vnmFunctionality_conditionalThemeSwitch\', 100);
这是可行的(只要没有错误),但是$isBlog 将始终返回false,因为在setup_theme. 如果我不使用add_action(\'setup_theme\') 而是移动add_filter 到插件根的行,条件可用,但它会导致许多其他问题(例如blog-theme 似乎试图表现得像site-theme, 无法加载所有排队的内容site-theme\'s函数文件)。

我还试着看global $wp_query 反对,看看我是否能找出你在网站上的位置,但即使在setup_theme.

我似乎不能迟于setup_theme 为了让主题切换正常工作,但这似乎还为时过早,无法确定用户在站点上的实际位置。有没有办法做到这一点?

参考:需求基于我影响范围之外的要求(阅读:客户)。这个次要的“只写博客”主题与站点的其他部分(由另一个开发人员制作)有着根本的不同,因此很遗憾,将其集成到现有主题中是不可行的

1 个回复
SO网友:cjbj

假设站点的博客部分具有不同的url结构(例如www.example.com/blog/this-is-my-blogpost) 您可以使用PHP$_SERVER 变量来确定正在调用哪个页面,并在表达式中使用该页来生成$isBlog 在适当的时候正确。

结束

相关推荐

Themes VS Plugins

如果我正在定制WordPress网站,我应该通过主题或插件来完成吗?所谓定制,我的意思是:添加新的自定义帖子类型,为用户添加新字段,但我想确认这是否是正确的方法。谢谢