【发布时间】:2022-01-19 20:17:30
【问题描述】:
我目前正在尝试扩展 WooCommerce 产品搜索,以便搜索使用我在常规产品数据部分中创建的自定义字段:
add_action( 'woocommerce_product_options_general_product_data', 'woocommerce_product_options_general_product_data_action', 9999, 0 );
function woocommerce_product_options_general_product_data_action(): void {
global $post;
echo '<div class="options_group">';
woocommerce_wp_text_input( [
'id' => '_pdc_notch',
'wrapper_class' => '',
'label' => 'Notch',
'desc_tip' => true,
'type' => 'text',
'description' => 'Enter notch PDC',
'value' => get_post_meta( $post->ID, '_pdc_notch', true )
] );
echo '</div>';
}
add_action( 'woocommerce_process_product_meta', 'woocommerce_process_product_meta_action', 10, 1 );
function woocommerce_process_product_meta_action( int $product_id ): void {
$pdc_notch = sanitize_text_field( wp_unslash( $_POST['_pdc_notch'] ?? null ) );
update_post_meta( $product_id, '_pdc_notch', $pdc_notch );
}
使用上面的代码,我可以添加和保存我的自定义字段。现在我用下面的钩子扩展了搜索:
add_action( 'woocommerce_product_query', 'woocommerce_product_query_action', 10, 2 );
function woocommerce_product_query_action( WP_Query $q, object $instance ) {
if ( ! is_admin() && $q->is_main_query() && $q->is_search() ) {
$meta_query = $q->get( 'meta_query' );
$meta_query[] = [
'key' => '_pdc_notch',
'value' => $q->query['s'],
'compare' => 'LIKE'
];
$q->set( 'meta_query', $meta_query );
}
}
当我在我的字段中设置“Iamabigtestword”之类的文本并将其放入搜索中时,我仍然一无所获。我错过了什么?我真的找不到这里的问题。通常,钩子应该可以工作(关于 StackOverflow 的回答:Include custom fields value in woocommerce search)
注意
您可以直接将代码复制/粘贴到您的子主题的functions.php 文件中以对其进行测试,因为它没有依赖项,并且应该将该字段添加到末尾的Products > Product > General 选项卡中。
【问题讨论】:
-
您是否已经测试过(通过调试)
woocommerce_product_query挂钩是否在搜索后/之后有效触发? -
是的,我总是默认这样做。 if 条件也被使用并返回查询。我想我会在核心函数中逐行调试它。我只是希望有人知道解决方案。
标签: php wordpress woocommerce