我甚至不确定这是否可行,但在我开始思考疯狂的解决方案之前,我会看看是否有一种WordPress方法可以做到这一点。
事情是这样的。
我在WordPress上设置了一个timeline jQuery插件,我希望它可以通过add\\u theme\\u支持方法在子主题中调用:
add_theme_support( \'timeline\' );
称之为对模块化设计的痴迷。我可能读了太多塔洛克的书,让任何一个男人都神智清醒,但这对我很有用。
因此,第一部分工作正常。
我有样式表&;如果指定了主题支持,那么js文件都会有条件地排队,而一个棘手的问题是我不能有条件地包含新的页面模板。在禁用时间线支持时显示“时间线”模板只是糟糕的UX设计。
所以这里有一个问题-是否有一种筛选方法可以有条件地从常规位置之外插入全局页面模板?例如,如果我要将页面模板放在/library/inc/conditionals/page timeline中。php(有效地从WordPress中隐藏),如何将其过滤回页面上的模板列表?如果我能弄明白,我可以将过滤器添加到我的add\\u theme\\u支持功能中,天使会飞翔,号角会响起,我会很高兴。
问题是我不熟悉这个特殊的下拉框,也不熟悉如何以一种不寻常的方式调用它。
谢谢你的智慧!(不是僵尸)
SO网友:Krzysiek Dróżdż
好的,那么就要找到合适的过滤器来修改可用模板列表。。。
模板列表来自get_page_templates
函数,但其代码中没有筛选器。但是它使用方法get_page_templates
类别的WP_Theme
这一个会很方便,因为这里有一个过滤器:
return (array) apply_filters( "theme_{$post_type}_templates", $post_templates, $this, $post, $post_type );
因此,正如您所看到的,您可以根据
$post_type
和当前
$post
.
那现在呢
可以尝试两种不同的方法:
从WP中隐藏页面模板并使用筛选器添加它,添加普通页面模板并使用筛选器删除它,我认为第二种方法更安全。我不知道会发生什么问题,如果页面模板将不仅仅是一个文件名,并将包含路径。。。我想这应该行得通,但是。。。
还有什么要记住的吗
正如Mark所指出的,它当然只会过滤您可以从中选择的模板列表。如果已经选择了模板,即使您将其从列表中删除,给定的页面也会使用它。
如果要阻止页面在不可用时使用此模板,可以使用template_include
要覆盖它。。。