使用自定义字段搜索WooCommerce产品

时间:2021-05-28 作者:Kyriakos

我有一个woocommerce电子商店网站。我的搜索仅在产品标题、简短描述和SKU字段中搜索。我还想在一些自定义字段中搜索(如“U barcode”和“U mpn”)。我想在产品页面上搜索,而不是在管理面板中搜索。

我有这个脚本,但当我在功能中使用它时。php我无法按产品标题或简短描述进行搜索。

function search_filter( $query ) {

    $key_fields = array ( \'_barcode\', \'_mpn\', \'_sku\' );
    $value_field = $query->query_vars[\'s\'];
    $query->query_vars[\'s\'] = \'\';

    if ( !is_admin() && $value_field != \'\' ) {

        $filter_query = array( \'relation\' => \'OR\' );

        foreach ( $key_fields as $one_field ) {
            array_push ( $filter_query , array (
                \'key\' => $one_field,
                \'value\' => $value_field,
                \'compare\' => \'LIKE\'
            ) );
        }
        $query->set( \'meta_query\' , $filter_query );
    }
}
add_filter( \'pre_get_posts\' , \'search_filter\');
为什么使用此脚本时无法按产品标题或简短描述进行搜索?有什么想法吗?

非常感谢。

1 个回复
SO网友:Kyriakos

通常我会键入条形码或sku编号。所以我得到1个结果。当我不使用此脚本时,搜索结果大约需要2-3秒。这是我的脚本:

function cf_search_join( $join ) {
    global $wpdb;

    if ( is_search() ) {    
        $join .=\' LEFT JOIN \'.$wpdb->postmeta. \' ON \'. $wpdb->posts . \'.ID = \' . $wpdb->postmeta . \'.post_id \';
    }
    return $join;
}
add_filter(\'posts_join\', \'cf_search_join\');

function cf_search_where( $where ) {
    global $pagenow, $wpdb;

    if ( is_search() ) {
        $where = preg_replace(
          "/\\(\\s*".$wpdb->posts.".post_title\\s+LIKE\\s*(\\\'[^\\\']+\\\')\\s*\\)/",
          "(".$wpdb->posts.".post_title LIKE $1 OR ".$wpdb->posts.".post_excerpt LIKE $1) OR (".$wpdb->postmeta. ".meta_value LIKE $1 AND ".$wpdb->postmeta. ".meta_key IN (\'_barcode\',\'_sku\') )", $where );
    }

    return $where;
}
add_filter(\'posts_where\', \'cf_search_where\');

function cf_search_distinct( $where ) {
    global $wpdb;

    if ( is_search() ) {
        return "DISTINCT";
    }

    return $where;
}
add_filter( \'posts_distinct\', \'cf_search_distinct\' );

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: