按多个自定义分类查询

时间:2018-04-13 作者:Ante Medic

我非常感谢您的帮助或任何线索。我有用于收集过滤器数据的复选框。以下是检查变量是否已设置的代码:

if ( isset($_GET[\'f\']) && $_GET[\'f\'] == \'1\')  {$face = \'facebook\';} else {$face = \'\';}
        if ( isset($_GET[\'t\']) && $_GET[\'t\'] == \'1\' ) {$twitter = \'twitter\';} else {$twitter = \'\';}
        if ( isset($_GET[\'te\']) && $_GET[\'te\'] == \'1\' ) {$telegram = \'telegram\';} else {$telegram = \'\';}
        if ( isset($_GET[\'r\']) && $_GET[\'r\'] == \'1\' ) {$reddit = \'reddit\';} else {$reddit = \'\';}
        if ( isset($_GET[\'e\']) && $_GET[\'e\'] == \'1\' ) {$email = \'email\';} else {$email = \'\';}
        if ( isset($_GET[\'ph\']) && $_GET[\'ph\'] == \'1\' ) {$phone = \'phone\';} else {$phone = \'\';}
        if ( isset($_GET[\'b\']) && $_GET[\'b\'] == \'1\' ) {$bitcointalk = \'bitcointalk\';} else {$bitcointalk = \'\';}
        if ( isset($_GET[\'k\']) && $_GET[\'k\'] == \'1\' ) {$kyc = \'kyc\';} else {$kyc = \'\';}
        if ( isset($_GET[\'y\']) && $_GET[\'y\'] == \'1\' ) {$youtube = \'youtube\';} else {$youtube = \'\';}
        if ( isset($_GET[\'l\']) && $_GET[\'l\'] == \'1\' ) {$linkedin = \'linkedin\';} else {$linkedin = \'\';}          
        if ( isset($_GET[\'eth\']) && $_GET[\'eth\'] == \'1\' ) {$ethereum = \'ethereum\';} else {$ethereum = \'\';}
        if ( isset($_GET[\'neo\']) && $_GET[\'neo\'] == \'1\' ) {$neo = \'neo\';} else {$neo = \'\';}
        if ( isset($_GET[\'xml\']) && $_GET[\'xml\'] == \'1\' ) {$stellar = \'stellar\';} else {$stellar = \'\';}
        if ( isset($_GET[\'waves\']) && $_GET[\'waves\'] == \'1\' ) {$waves = \'waves\';} else {$waves = \'\';}
        if ( isset($_GET[\'kmd\']) && $_GET[\'kmd\'] == \'1\' ) {$komodo = \'komodo\';} else {$komodo = \'\';}
        if ( isset($_GET[\'own\']) && $_GET[\'own\'] == \'1\' ) {$own = \'own\';} else {$own = \'\';}
我有两个自定义分类法:过滤器和平台。如果我只按1个自定义分类法进行筛选,查询就可以工作。但最近我添加了第二个(平台)。下面是我尝试使用的代码:

$tax_query_args = array(
                    \'relation\'      => \'OR\',
                    array(
                        \'taxonomy\' => \'filters\',
                        \'field\'    => \'slug\',
                        \'terms\'    => array ($face, $twitter, $telegram, $reddit, $email, $phone, $bitcointalk, $kyc, $youtube, $linkedin),
                        \'operator\' => \'IN\'
                    ), 

                    array(
                        \'taxonomy\' => \'platform\',
                        \'field\'    => \'slug\',
                        \'terms\'    => array ($ethereum, $neo, $stellar, $waves, $komodo, $own),
                        \'operator\' => \'IN\'
                    ), 

                );
但它不起作用。返回所有结果。

如果有任何帮助,我将不胜感激。

非常感谢。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

根据您的代码,如果url为:

http://example.com/page/?eth=1&t=1
然后,生成的查询将是:

$tax_query_args = array(
    \'relation\'      => \'OR\',
    array(
        \'taxonomy\' => \'filters\',
        \'field\'    => \'slug\',
        \'terms\'    => array( \'\', \'twitter\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\' ),
        \'operator\' => \'IN\'
    ), 
    array(
        \'taxonomy\' => \'platform\',
        \'field\'    => \'slug\',
        \'terms\'    => array ( \'ethereum\', \'\', \'\', \'\', \'\', \'\'),
        \'operator\' => \'IN\'
    ), 
);
虽然空变量有点混乱,WordPress会忽略它们。所以实际上你只是在查询有“推特”的帖子filter 或“以太坊”platform. 因此,如果这是您想要的,那么代码就可以了。

如果不起作用,则可能是slug或分类名称不正确,或者您使用的查询有其他问题$tax_query_args 在里面如果看不到更多,就不可能说,但你这里的一切都很好。

综上所述,我想建议一种更干净的方法来解决这个问题。

您提到了复选框,并且基于您对$_GET 我假设您的表单如下所示:

<input name="t" value="1" type="checkbox">
<input name="f" value="1" type="checkbox">
<input name="eth" value="1" type="checkbox">
<input name="neo" value="1" type="checkbox">
这样做意味着您需要大量代码来确定选择了哪些分类术语。

我建议您将表单更改为这样:

<input name="filter[]" value="twitter" type="checkbox">
<input name="filter[]" value="facebook" type="checkbox">
<input name="platform[]" value="ethereum" type="checkbox">
<input name="platform[]" value="neo" type="checkbox">
现在,要查询正确的分类术语,只需执行以下操作:

$filters = isset( $_GET[\'filters\'] ) ? $_GET[\'filters\'] : array();
$platform = isset( $_GET[\'platform\'] ) ? $_GET[\'platform\'] : array();

$tax_query_args = array(
    \'relation\'      => \'OR\',
    array(
        \'taxonomy\' => \'filters\',
        \'field\'    => \'slug\',
        \'terms\'    => $filters,
        \'operator\' => \'IN\'
    ), 
    array(
        \'taxonomy\' => \'platform\',
        \'field\'    => \'slug\',
        \'terms\'    => $platform,
        \'operator\' => \'IN\'
    ), 
);

结束

相关推荐

自定义WP_QUERY循环中的AJAX无限滚动无法工作

我已经为页面模板设置了一个自定义WP\\U查询循环。我通过ajax实现了一个无限滚动方法,调用成功,但由于某些原因,我无法让查询喜欢循环中的分页参数。它什么也拉不动。以下是我的ajax操作代码:// AJAX Infinite Scroll function txcap_ajax_scroll() { $args = isset( $_POST[\'query\'] ) ? array_map( \'esc_attr\', $_POST[\'query\