【问题标题】:Include custom fields value in woocommerce search在 woocommerce 搜索中包含自定义字段值
【发布时间】:2018-09-04 21:04:44
【问题描述】:

我尝试在 woocommerce 搜索中包含自定义字段值,但我遇到了问题。

在 Google 和 Stack 上,我也看到了 pre_get_posts 的示例,所以我认为这是一个很好的方向,我编写了这样的代码:

function custom_search( $query ) {

    if( ! is_admin() && $query->is_main_query() ) {

        if ( $query->is_search() ) { 

            $meta_query = array(
                'key'       => 'custom_color',
                'value'     => $query->query['s'],
                'compare'   => 'LIKE'  
            );

            $query->set( 'meta_query', $meta_query );

        }

    }

}

add_action( 'pre_get_posts' , 'custom_search' );

不幸的是,它不起作用。你能帮帮我吗?

【问题讨论】:

  • 除非我弄错了它是$query->is_search(),因为它是一个函数。
  • 是的,这是真的(我编辑了我的帖子),但仍然无法正常工作
  • 您能否指定如何创建“custom_color”自定义字段、acf 插件?
  • 通常 custom_color 只是一个例子。我真正的领域是 _codeproduct 我是这样设计的:pastebin.com/3Brz6Cwn

标签: wordpress search woocommerce custom-fields


【解决方案1】:

这是我来自wordpress.stackexchange.com的类似问题:

这就是我一直在寻找的,它是正确的解决方案

【讨论】:

    【解决方案2】:

    我知道你做错了什么,这是我在自己的实例上做的一个工作示例。

    function custom_search( $query ) {
    
        if( ! is_admin() && $query->is_main_query() ) {
    
            if ( $query->is_search() ) { 
    
                $meta_query = $query->get( 'meta_query' );
    
                $meta_query[] = array(
                    'key'       => 'custom_color',
                    'value'     => $query->query['s'],
                    'compare'   => 'LIKE'  
                );
    
                $query->set( 'meta_query', $meta_query );
    
            }
    
        }
    
    }
    
    add_action( 'woocommerce_product_query' , 'custom_search' );
    

    由于您使用的是 Woocommerce 搜索 woocommerce_product_query 将是正确的钩子,并且为了安全起见,将现有默认值保留为 $query->get( 'meta_query' );

    参考: WooCommerce search products between price range using WP_Query

    感谢 OP 给我带来了这个案例 :)

    【讨论】:

    • 非常感谢您的回答,但是此代码仅在我搜索空值时才有效(例如:?s=&post_type=product)。这不是我所期望的,或者我可能拼错了我的问题。这是一个很好理解的示例:我有另一个自定义字段 _codeproduct。 (pastebin.com/3Brz6Cwn) 产品有代码(例如一个产品: A0099B ) 我想按产品代码搜索产品。用这种方法可以吗?或者也许我应该为这个问题打开新线程,因为这是完全不同的情况?
    • @Luk 只需将custom_color 替换为_codeproduct 就可以了,我亲自尝试使用我的定价密钥并将比较值更改为相等,并且它起作用了。也许您尝试比较的值有问题,或者您排除了更复杂的行为或结果?
    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 2015-10-04
    • 2019-04-11
    • 1970-01-01
    • 2015-12-20
    • 2016-07-28
    • 1970-01-01
    • 2014-06-13
    相关资源
    最近更新 更多