在短代码中,我可以按自定义字段值限制wp_query
个结果。
示例:
[my-shortcode meta_key=my-custom-field meta_value=100,200 meta_compare='IN']
显然,可以在wp_query
中使用多个自定义字段,例如WP_Query#Custom_Field_Parameters
但是如何在短信中使用多个自定义字段?目前,我使用$atts
传递了所有短代码参数。
答案 0 :(得分:0)
在一些不同的解决方案上可能是使用JSON编码格式的元值。请注意,这不是完全用户友好的,但肯定能达到你想要的效果。
您当然需要首先生成json编码值并确保它们的格式正确。一种方法是使用PHP的内置函数:
// Set up your array of values, then json_encode them with PHP
$values = array(
array('key' => 'my_key',
'value' => 'my_value',
'operator' => 'IN'
),
array('key' => 'other_key',
'value' => 'other_value',
)
);
echo json_encode($values);
// outputs: [{"key":"my_key","value":"my_value","operator":"IN"},{"key":"other_key","value":"other_value"}]
短代码中的示例用法:
[my-shortcode meta='[{"key":"my_key","value":"my_value","operator":"IN"},{"key":"other_key","value":"other_value"}]']
然后你会在你的短代码函数中解析出来,就像这样:
function my_shortcode($atts ) {
$meta = $atts['meta'];
// decode it "quietly" so no errors thrown
$meta = @json_decode( $meta );
// check if $meta set in case it wasn't set or json encoded proper
if ( $meta && is_array( $meta ) ) {
foreach($meta AS $m) {
$key = $m->key;
$value = $m->value;
$op = ( ! empty($m->operator) ) ? $m->operator : '';
// put key, value, op into your meta query here....
}
}
}
替代方法
另一种方法是让你的短代码接受任意数量的代码,并使用匹配的数字索引,如下所示:
[my-shortcode meta-key1="my_key" meta-value1="my_value" meta-op1="IN
meta-key2="other_key" meta-value2="other_value"]
然后,在您的短代码功能中,"观看"对于这些价值并自己粘合它们:
function my_shortcode( $atts ) {
foreach( $atts AS $name => $value ) {
if ( stripos($name, 'meta-key') === 0 ) {
$id = str_ireplace('meta-key', '', $name);
$key = $value;
$value = (isset($atts['meta-value' . $id])) ? $atts['meta-value' . $id] : '';
$op = (isset($atts['meta-op' . $id])) ? $atts['meta-op' . $id] : '';
// use $key, $value, and $op as needed in your meta query
}
}
}