作为短码执行的一部分,我应该如何更改模板&$Query?

时间:2013-05-12 作者:Dan

我正在从事一个项目,如果使用给定的短代码,我需要能够更改正在使用的模板。更复杂的是,插件还必须能够重写$query 如果调用相同的短代码。

我相信我在core exec的各个部分与Shortcode运行时遇到了问题,但我在Codex中找不到正确的信息来验证或调试问题。目前,我的实现既不修改$query 它也不会重定向模板。

基本上,短代码的工作方式(或者在本例中不工作)如下所示:

调用Shortcode基于Shortcode中的信息,会生成参数来检索一些帖子这些参数被分配给一个全局变量,我们称之为$custom, 在shortcode函数中,也在shortcode中,I hooktemplate_redirect 具有get_home_template() 由于参数也是在shortcode函数中,pre_get_posts 与指定$querynew new WP_Query( $custom )

2 个回复
SO网友:s_ha_dum

当您的短代码在the_content 钩子(通常)主查询已执行pre_get_posts 钩子已为主查询激发,并且template_redirect 胡克开火了。

你将无法template_redirect 或者更改主查询(如果需要的话),而不以某种方式使您的短代码比通常的短代码运行得更早,这意味着在pre_get_posts 挂钩回调,甚至更早,这取决于您尝试执行的操作的详细信息。

这可能意味着检索帖子(您在pre_get_posts 阶段),分析短代码,然后使用查询更改再次检索帖子。这是一个相当沉重的负担。

在我看来,您似乎在尝试使用短代码来实现一个功能,而它们并不是真正想要实现的功能。短代码是一种类似于BB代码的内容格式化和显示功能,而不是改变循环和重定向功能。

如果你解释你想要的结果,而不是问如何实现一个特定的解决方案,也许你会有更好的运气。

SO网友:fuxia

正如@s\\u ha\\u dum所说,短代码是视图,是查询的一个最新结果,而不是它的先决条件。

执行您所要求的操作的唯一方法是在设置查询之前很久解析短代码:onsave_post 例如然后,您必须计算查询筛选器的参数,将它们存储在单独的选项中,并在中使用该选项值pre_get_posts 避免第二次查询。

但即使这种方法本身也不兼容:另一个以同样方式工作的短代码会破坏第一个。

这闻起来像XY problem. 我想一个帖子元字段或只是一个自定义的帖子模板,可以从元框中选择,会更合适。

结束

相关推荐

Clearfix Shortcode

我的一位客户在WordPress网站的页面上放置图像时遇到了问题。页面将有一个图像(左对齐),右侧有一些文本,然后是另一个图像,右侧有一些文本,等等。不幸的是,当文本比其图像短时,下面的图像将放置在第一个图像的右侧,这使得布局非常混乱。她使用的是可视化编辑器,文本编辑器有困难,所以添加class=\"clearfix\" (参考通常的after: clearfix黑客入侵styles.css) 直到最后一段,接下来的图像对她来说是行不通的。因此,为了方便我的客户,我承诺添加一个clearfix快捷码。(请