我需要制作一个使用四种不同分类法的值的短代码。我正在尝试修改用于根据多个分类术语查询附件(在媒体中)的代码,但我需要的是根据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\');
感谢您提供的任何帮助。
最合适的回答,由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\'
是默认值,因此您可能不需要显式声明它。