如何在 WooCommerce 中将自定义元字段附加为简码参数值
How to append a custom meta field as a shortcode argument value in WooCommerce
我创建了一个自定义复选框字段 _is_group
,我希望能够在 [products...]
简码中使用它。
当前使用的解决方法是,我首先使用 wc_get_products()
创建查询,然后将返回的 IDs
传递给标准简码,使用 implode()
函数:
$group = wc_get_products([
'post_type' => 'product',
'meta_key' => '_is_group',
'meta_value' => 'yes',
'meta_compare' => 'IN',
'return' => 'ids'
]);
echo do_shortcode('[products ids="' . implode(',', $group) . '"]');
当然可以,但它看起来很丑,不必要地进行了两个数据库查询而不是一个。我认为有更好的方法来处理它,比如:
[products columns="3" is_group="yes"]
所以我决定询问如何将自定义元字段附加为 Woocommerce 中的简码参数值。也许解决方案是使用 woocommerce_shortcode_products_query
或其他方式?
注意:我见过其他类似的问题和解决方案,例如在另一个短代码中使用自定义短代码,但这并不能解决问题。我关心优化
您需要两个部分:
支持您自己的 [products]
简码属性。
// Add your own attribute
function filter_shortcode_atts_products( $out, $pairs, $atts, $shortcode ) {
// Isset and equal to yes
if ( isset ( $atts['is_group'] ) && $atts['is_group'] == 'yes' ) {
$out['is_group'] = true;
} else {
$out['is_group'] = false;
}
return $out;
}
add_filter( 'shortcode_atts_products', 'filter_shortcode_atts_products', 10, 4 );
- 修改查询以使用您的
$query_args
// Modify the query args
function filter_woocommerce_shortcode_products_query( $query_args, $atts, $type ) {
// Target
if ( $type == 'products' && $atts['is_group'] ) {
// Meta query
$query_args['meta_query'] = array(
array(
'key' => '_is_group',
'value' => 'yes',
'compare' => 'IN',
)
);
}
return $query_args;
}
add_filter( 'woocommerce_shortcode_products_query', 'filter_woocommerce_shortcode_products_query', 10, 3 );
SHORTCODE USAGE
In an existing page:
[products columns="3" is_group="yes"]
Or in PHP:
echo do_shortcode('[products columns="3" is_group="yes"]');
我创建了一个自定义复选框字段 _is_group
,我希望能够在 [products...]
简码中使用它。
当前使用的解决方法是,我首先使用 wc_get_products()
创建查询,然后将返回的 IDs
传递给标准简码,使用 implode()
函数:
$group = wc_get_products([
'post_type' => 'product',
'meta_key' => '_is_group',
'meta_value' => 'yes',
'meta_compare' => 'IN',
'return' => 'ids'
]);
echo do_shortcode('[products ids="' . implode(',', $group) . '"]');
当然可以,但它看起来很丑,不必要地进行了两个数据库查询而不是一个。我认为有更好的方法来处理它,比如:
[products columns="3" is_group="yes"]
所以我决定询问如何将自定义元字段附加为 Woocommerce 中的简码参数值。也许解决方案是使用 woocommerce_shortcode_products_query
或其他方式?
注意:我见过其他类似的问题和解决方案,例如在另一个短代码中使用自定义短代码,但这并不能解决问题。我关心优化
您需要两个部分:
支持您自己的
[products]
简码属性。
// Add your own attribute
function filter_shortcode_atts_products( $out, $pairs, $atts, $shortcode ) {
// Isset and equal to yes
if ( isset ( $atts['is_group'] ) && $atts['is_group'] == 'yes' ) {
$out['is_group'] = true;
} else {
$out['is_group'] = false;
}
return $out;
}
add_filter( 'shortcode_atts_products', 'filter_shortcode_atts_products', 10, 4 );
- 修改查询以使用您的
$query_args
// Modify the query args
function filter_woocommerce_shortcode_products_query( $query_args, $atts, $type ) {
// Target
if ( $type == 'products' && $atts['is_group'] ) {
// Meta query
$query_args['meta_query'] = array(
array(
'key' => '_is_group',
'value' => 'yes',
'compare' => 'IN',
)
);
}
return $query_args;
}
add_filter( 'woocommerce_shortcode_products_query', 'filter_woocommerce_shortcode_products_query', 10, 3 );
SHORTCODE USAGE
In an existing page:
[products columns="3" is_group="yes"]
Or in PHP:
echo do_shortcode('[products columns="3" is_group="yes"]');