坦率地说,我不太确定你想做什么,你的术语有点混乱,你的示例短代码也很混乱。
在我开始之前,您应该首先检查以下非常重要的链接
首先,您应该定义您需要使用的属性(及其默认值),并将其传递给快捷码。根据你的例子,你可以这样做
$a = shortcode_atts(
array(
\'posts_per_page\' => 2,
\'post_type\' => \'product\',
\'taxonomy\' => \'product_brand\',
\'term_id\' => \'\',
\'term_name\' => \'\',
\'term_slug\' => \'\',
// Rest of attributes required
),
$atts );
您可以根据需要设置任意多个属性以满足您的需要。据我所知,您希望将术语名称或id传递给短代码,因此我相应地设置了属性。我也包括了slug。为了保持短代码的动态性,最好不要对查询的参数进行硬编码。将它们设置为具有默认值的属性。如果需要为另一个分类法或post类型重用短代码,可以通过传递的属性更改值
接下来你需要做的是调整你的tax_query
根据传递的术语值设置正确的field
价值为此,您可以尝试这样的条件
$term_id = $a[\'term_id\'];
$term_name = $a[\'term_name\'];
$term_slug = $a[\'term_slug\'];
if ( $term_id ) {
$terms = $term_id;
$field = \'term_id\';
} elseif ( $term_name ) {
$terms = $term_name;
$field = \'name\';
} elseif ( $term_slug ) {
$terms = $term_slug;
$field = \'slug\';
}
你现在可以通过了
$terms
和
$field
到您的
tax_query
\'tax_query\' => array(
array(
\'taxonomy\' => $a[\'taxonomy\'],
\'field\' => $field,
\'terms\' => $terms,
\'include_children\' => false
)
),
现在,您可以根据需要在短代码中传递术语id、名称或slug,如下所示
[my_shortcode posts_per_page=\'3\' term_id=3]
或
[my_shortcode posts_per_page=\'3\' term_name=\'My term name\']
或
[my_shortcode posts_per_page=\'3\' term_slug=\'my-term-slug\']
几点注意事项这只是一个骨架,可以让你走上正轨。根据需要扩展和滥用它
您需要相应地清理和验证来自属性的数据,以避免可能的错误、意外的输出和安全漏洞。例如,您可能首先检查是否有一个术语值,然后检查该术语是否确实存在,然后再将其作为参数传递并构建查询。