将Wordpress functions.php中的代码仅应用于一个类别

时间:2011-07-18 02:03:21

标签: php wordpress

有没有办法限制我添加到我的functions.php文件中的以下代码,以便它只适用于单个wordpress类别?

<?php remove_filter('the_content', 'wpautop'); ?>

我试过这个,但似乎没有用:

<?php if (in_category('work')) { remove_filter('the_content', 'wpautop'); } ?>

我还应该补充一点,我通过将代码直接放在特定的类别模板中解决了这个问题,但我更喜欢将过滤器保存在我的函数文件中。

谢谢!

2 个答案:

答案 0 :(得分:1)

我相信您会想要加入pre_get_posts action。它在解析查询字符串后立即触发。设置了一些但不是所有条件。你可以测试in_category()是否是其中之一,但我认为这不重要。为什么?很高兴你问。

钩子将向您传递查询对象,该对象具有属性category_name。您所要做的就是检查它是否有您的类别,如果是这样,请点击您的过滤器。像这样:

function ns_function_name($wpq){
    if($wpq->category_name == 'work'){
        remove_filter('the_content', 'wpautop');
    }
}
add_action( 'pre_get_posts', 'ns_function_name' );

这是完全未经测试的。但是既然你似乎知道自己在做什么,那么它应该足以让你走上正确的道路。

答案 1 :(得分:0)

您的functions.php不知道索引和类别页面的当前请求。要使这个代码在functions.php中工作,你必须获取原始服务器变量并解析它们以加载与当前url相关的wp_query功能:

$url = explode('?', 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
$ID = url_to_postid($url[0]);

获得该ID后,您可以执行查询循环并根据类别触发过滤器。