我創建了一個自定義復選框欄位_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或其他什么?
注意:我見過其他類似的問題和解決方案,例如在另一個短代碼中使用自定義短代碼,但這并不能解決問題。我關心優化
uj5u.com熱心網友回復:
你需要兩部分:
支持您自己的
[products]短代碼屬性。- https://developer.wordpress.org/reference/hooks/shortcode_atts_shortcode/
// 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 );
短代碼用法
在現有頁面中:
[products columns="3" is_group="yes"]或者在 PHP 中:
echo do_shortcode('[products columns="3" is_group="yes"]');
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364212.html
標籤:php WordPress的 求购 钩子商务 短代码
