产品查询结果不正确



我需要库存选项卡上的自定义字段,该字段将使用邮政编码作为代理的位置填写。

有了我在这里得到的参考资料,现在我有了这个领域。

我想问的是如何将这些元数据与wooccommerce短代码连接起来?

我想:

['products limit="12" columns="4" zipcode="12345"]

其中";12345";将根据需要动态更改(根据代理位置填写邮政编码)。

我试着做了一些事情,但效果不好。

这是完整的代码。

function action_woocommerce_product_options_inventory_product_data_zipcode() {
woocommerce_wp_text_input( array(
'id'            => '_zipcode',
'label'         => __( 'Zipcode', 'woocommerce' ),
'description'   => __( 'Please fill your zipcode.', 'woocommerce' ),
'desc_tip'      => 'true',
'placeholder'   => __( '12345', 'woocommerce' )
) );
}

add_action( 'woocommerce_product_options_inventory_product_data', 'action_woocommerce_product_options_inventory_product_data_zipcode' );
// Save zipcode
function action_woocommerce_admin_process_product_object_zipcode( $product ) {
// Isset
if ( isset( $_POST['_zipcode'] ) ) {        
// Update
$product->update_meta_data( '_zipcode', sanitize_text_field( $_POST['_zipcode'] ));
}
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object_zipcode', 10, 1 );

尝试使用短代码产品:

function filter_shortcode_atts_products_zipcode ( $out, $pairs, $atts, $shortcode) {
if ( isset ( $atts['zipcode'] ) && !empty($atts['zipcode']) ) {   
$out['zipcode'] = true;
} else {
$out['zipcode'] = false;
}
return $out;
}
add_filter( 'shortcode_atts_products', 'filter_shortcode_atts_products_zipcode', 10, 4);

function filter_woocommerce_shortcode_products_query_zipcode( $query_args, $atts, $type) {
if ( $type == 'products' && $atts['zipcode'] ) {    

// Meta query       
$query_args['meta_query'] = array(
array(
'key'     => '_zipcode',
'value'   => $atts['zipcode'],
'compare' => 'LIKE',
)
);
}
return $query_args;
}
add_filter( 'woocommerce_shortcode_products_query', 'filter_woocommerce_shortcode_products_query_zipcode', 10, 3 );

在测试中,我尝试过:

['products limit="12" columns="4" zipcode="12345"]

shortcode已经显示了产品,但不是指短代码("12345")中的邮政编码,而是指具有邮政编码的所有产品。

有人能帮我吗?

谢谢

shortcode属性函数感觉有些不对劲。我认为您将属性设置为true,因此它将比较任何";真的"也许只需尝试将真正的设置为邮政编码,如下所示:

function filter_shortcode_atts_products_zipcode ( $out, $pairs, $atts, $shortcode) {
if ( isset ( $atts['zipcode'] ) && !empty($atts['zipcode']) ) {   
$out['zipcode'] = $atts['zipcode'];
} else {
$out['zipcode'] = false;
}
return $out;
}

这样,如果存在邮政编码,它将返回邮政编码,如果不存在,则返回false,然后查询可以将其用于比较。

最新更新