按4个不同的分类法进行WP查询

时间:2020-09-17 作者:panaeleous

我需要制作一个使用四种不同分类法的值的短代码。我正在尝试修改用于根据多个分类术语查询附件(在媒体中)的代码,但我需要的是根据4(四)个分类值进行wp\\u查询。我意识到我离成功还有很长的路要走,但也许有人能帮助我走上正轨。

这四种分类法是:

我想使用一个短代码,如:[get_media_by_taxes cpt="attachment" media_language="spanish" media_document_category="brochure" mp_industry="food" mp_product_lines="allergens"] <;--我可以这样做吗?

我知道查询分类法之间的关系是;和;。。下面是由多个术语组成的快捷代码的副本。

    function get_media_by_taxes($atts){                             

    $a = shortcode_atts( array(
        \'cpt\'                     => \'attachment\',
        \'media_language\'          => \'english\',
        \'media_document_category\' => \'brochures\',
        \'mp_industry\'               => \'food\',
        \'mp_product_lines\'          => \'allergens\', // add default values to these if needed or set defaults as in the example below
    ), $atts );

    $args = array(
        \'post_status\' => \'inherit\',
        \'posts_per_page\' => -1,
        \'post_type\' =>  $a[\'cpt\'],
    );
    
    $terms = explode(\',\', $a[\'terms\']);


    $args[\'tax_query\'] = array(
        array(
            \'taxonomy\' => \'media_language\',
            \'field\'    => $terms,
            \'terms\'    => ! empty($a[\'language\']) ? $a[\'language\'] : \'english\',
        ),
        array(
            \'taxonomy\' => \'media_document_category\',
            \'field\'    => $terms,
            \'terms\'    => ! empty($a[\'document_category\']) ? $a[\'document_category\'] : \'brochures\',
        ),
        array(
            \'taxonomy\' => \'mp_industry\',
            \'field\'    => $terms,
            \'terms\'    => ! empty($a[\'industry\']) ? $a[\'industry\'] : \'food\',
        ),
        array(
            \'taxonomy\' => \'mp_product_lines\',
            \'field\'    => $terms,
            \'terms\'    => ! empty($a[\'product_lines\']) ? $a[\'product_lines\'] : \'allergens\',
        ),
    );
    
    $output=\'<div class="media-attachments-list"><ul>\';

    $the_query = new WP_Query( $args );
    
    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
        $the_query->the_post();
            $output.= \'<li>\' . wp_get_attachment_link() . \'</li>\';
        }
    }
    return $output .= \'</ul></div>\';
    
    /* Restore original Post Data */
    wp_reset_postdata();

}

      add_shortcode(\'get_media_by_taxes\', \'get_media_by_taxes\');
感谢您提供的任何帮助。

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

是的,你在正确的轨道上。如果您提到的四个分类法是注册分类法的slug,那么您需要将它们用作taxonomy 参数以及作为terms 不同tax_query 阵列。

您还需要将税务参数设置为shortcode_atts 默认阵列,使其在$a 变量

$a = shortcode_atts( array(
    \'cpt\'               => \'\',
    \'language\'          => \'\',
    \'document_category\' => \'\',
    \'media_industry\'    => \'\',
    \'product_line\'      => \'\', // add default values to these if needed or set defaults as in the example below
), $atts );
不同的分类法也可以是可选的,

if ( $a[\'language\'] ) {
    $args[\'tax_query\'][] = array(
        \'taxonomy\' => \'media_language\',
        \'field\'    => \'slug\',
        \'terms\'    => $a[\'language\'],
    );
}
如果未设置为,则设置默认值shortcode_atts()

$args[\'tax_query\'] = array(
    array(
        \'taxonomy\' => \'media_language\',
        \'field\'    => \'slug\',
        \'terms\'    => ! empty($a[\'language\']) ? $a[\'language\'] : \'some-default-term\',
    ),
    // more taxonomies...
);
我想\'relation\' => \'AND\' 是默认值,因此您可能不需要显式声明它。

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\