在‘POSTS_WHERE’过滤器中使用动态条件

时间:2012-12-08 作者:Sudar

我有以下代码,它给出了过去100天内发布的be帖子

function smbd_cats_by_days ($where = \'\') {

    $where .= " AND post_date < \'" . date(\'y-m-d\', strtotime("-100 days")) . "\'";
    return $where;
}

add_filter(\'posts_where\', \'smbd_cats_by_days\');
它工作得很好。但现在我想让这个函数成为泛型函数。(即)我希望将天数存储在变量中,而不是将其硬编码为100。

如何做到这一点?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我担心你想要那个。You can\'t really do that. 请按照链接了解一些解决方法。您还可以在中设置变量或常量functions.php, 或者为此创建一个主题选项。然后在函数中使用它。

function smbd_cats_by_days ($where = \'\') {
    // global $days_limit; // if a variable
    // $days_limit = DAYS_LIMIT; // if a constant
    // $days_limit = get_option(\'days_limit\',100);
    // you have to uncomment one of the above, 
    // depending on your choice of mechanisms
    $where .= " AND post_date < \'" . date(\'y-m-d\', strtotime("-{$days_limit} days")) . "\'";
    return $where;
}

add_filter(\'posts_where\', \'smbd_cats_by_days\');

http://codex.wordpress.org/Function_Reference/get_option

SO网友:indextwo

您可以使用匿名函数,如this blog post, 它利用为posts_where 过滤器:

$options = array(
    \'max_post_age\' => \'30 days\'
);

$age_filter = function ($where = \'\') use ( $options ) {
    $where .= " AND post_date > \'" . date( \'Y-m-d\', strtotime( \'-\' . $options[ \'max_post_age\' ] ) ) . "\'";
    return $where;
};

add_filter(\'posts_where\', $age_filter);
$query = new WP_Query($args);
remove_filter(\'posts_where\', $age_filter);
作者确实在单个表达式中实现了这一点,但在大多数情况下,使用匿名函数应该可以完美地工作。

值得注意的是,Wordpress 3.7将有一组新的very handy date parameters 添加到WP_Query.

EDIT: 正如我昨晚发现的,Lambda函数(即。function ($where = \'\') use ( $options )) 仅在中可用PHP 5.3+.

结束

相关推荐

为什么wp_enQueue_script不加载包含的jQuery UI脚本?

使用Wordpress 3.4.2,wp\\u enqueue\\u脚本文档似乎表明可以通过引用jQuery UI库的句柄来加载它们。我有以下代码,之前没有wp\\u register\\u script():wp_enqueue_script(\'jquery\'); wp_enqueue_script(\'jquery-ui-core\'); “jquery”的排队工作正常,但“jquery ui core”的排队不工作。我意识到我可以使用Google CDN显式注册和加载脚本(或者