将变量添加到POST查询

时间:2011-03-22 作者:patnz

如何将自定义变量添加到wordpress查询中,而不必访问数据库两次。在下面的示例中,我想添加一些元过滤器。所有这些代码都工作正常,但我一直在运行query\\u posts()来执行它。我希望能够在默认情况下运行查询之前将其添加到查询中,这样我就不必查询数据库两次。

在这里,我希望如果在执行之前修改$wp\\u query->query,我的更改将添加到查询中。查询的更改很好,只是没有更改输出。有什么想法吗?谢谢

add_action(\'pre_get_posts\', \'my_custom_query\'); 
function my_custom_query(){

if(isset($_SESSION[\'size\']) && $_SESSION[\'size\'] != \'all\'){
    $cfilter[] = array( \'key\' => \'cc_size\', \'value\' => $_SESSION[\'size\'] );
}

if(isset($_SESSION[\'gender\']) && $_SESSION[\'gender\'] != \'all\'){
    $cfilter[] = array( \'key\' => \'cc_gender\', \'value\' => $_SESSION[\'gender\'] );
}


$extraArgs = array(
    \'orderby\' => \'post-title\',
    \'paged\' => get_query_var(\'paged\')
);


if(!empty($cfilter)){ $extraArgs[\'meta_query\'] = $cfilter; }

global $wp_query;
$wp_query->query = array_merge( $wp_query->query, $extraArgs );
}

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

正如toscho所说,您可以在pre_get_posts 钩该钩子获取作为参数传递的查询对象,因此您不必读取全局变量。

add_action( \'pre_get_posts\', \'wpse12692_pre_get_posts\' ); 
function wpse12692_pre_get_posts( &$wp_query )
{
    if( isset( $_SESSION[\'size\'] ) && $_SESSION[\'size\'] != \'all\' )
    {
        $wp_query->query_vars[\'meta_query\'] = array(
            \'key\' => \'cc_size\',
            \'value\' => $_SESSION[\'size\'],
        );
    }

    if( isset( $_SESSION[\'gender\'] ) && $_SESSION[\'gender\'] != \'all\' )
    {
        $wp_query->query_vars[\'meta_query\'] = array(
            \'key\' => \'cc_gender\',
            \'value\' => $_SESSION[\'gender\'],
        );
    }

    $wp_query->query_vars[\'orderby\'] = \'post-title\';
    // The next line is redundant, get_query_vars reads it from the global $wp_query object
    $wp_query->query_vars[\'paged\'] = get_query_var(\'paged\');
}
我发现您的查询依赖于会话变量。这会使将指向页面的链接转发给其他人变得更加困难。你有没有考虑过把这个放在URL中并从那里读取它?您可以通过创建额外的重写规则来做到这一点。

SO网友:fuxia

加入行动\'pre_get_posts\'.
示例:

add_action( \'pre_get_posts\', \'no_sticky_on_front\' );

function no_sticky_on_front()
{
    is_front_page() and $GLOBALS[\'wp_query\']->query_vars[\'ignore_sticky_posts\'] = TRUE;
}

结束

相关推荐

类似于cnet.com的jQuery滑块小部件

我正在构建一个WP主题,它需要一个启动图形“滑块”小部件(类似于你在cnet.com上看到的)。我想自己构建一个,主要是为了能够完全控制bits,但如果有任何许可选项可用于商业运输软件,我也会考虑这些选项。有没有人可以分享一个通过enqueue使用内置的WP jQuery脚本创建“图形滑块”小部件(或插件)的例子?我所说的“图形滑块”只是指一个显示一系列命名图像的脚本,以及底部的索引,该索引显示当前幻灯片,并允许在旋转过程中回退/向前跟踪特定幻灯片。如果小部件有一个控制面板,允许用户上传/删除每个滑块图形