扩展WooCommerce管理产品搜索

时间:2018-02-12 作者:Damir Gasparlin

我已经为产品添加了自定义字段,但在管理页面中搜索不起作用。尝试了许多代码,发现这一个最终有效here 但它删除了默认的按标题搜索,所以如果使用该代码,按标题搜索将不再有效。

如何编辑代码以添加元键搜索,但仍能在默认搜索上工作?

谢谢你的帮助!

代码如下:

function extend_admin_search( $query ) {

 // Extend search for document post type
 $post_type = \'product\';
 // Custom fields to search for
 $custom_fields = array(
        "_productquality",
    );

    if( ! is_admin() )
        return;

    if ( $query->query[\'post_type\'] != $post_type )
   return;

    $search_term = $query->query_vars[\'s\'];

    // Set to empty, otherwise it won\'t find anything
    $query->query_vars[\'s\'] = \'\';

    if ( $search_term != \'\' ) {
        $meta_query = array( \'relation\' => \'OR\' );

        foreach( $custom_fields as $custom_field ) {
            array_push( $meta_query, array(
                \'key\' => $custom_field,
                \'value\' => $search_term,
                \'compare\' => \'LIKE\'
            ));
        }

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

add_action( \'pre_get_posts\', \'extend_admin_search\' );

1 个回复
SO网友:Rohit Verma

我解决了这个问题,只需粘贴代码就可以了functions.php 代码不会删除默认的按标题搜索。

请参见带有屏幕截图的示例

首先,添加自定义字段组Post Type is equal to Product 并添加一个具有字段标签和字段名称的新字段,如下所示

adding custom

在产品编辑页面中显示的自定义字段中添加一些文本

editing in product page

在最后一步中,只需将代码添加到function.php 并在数组中用逗号分隔字段名称$custom_fields = array("_product_test");

function search_by_custom_field_for_admin( $search, &$wp_query ) {
    global $wpdb, $pagenow;
    $post_type = \'product\';
    $custom_fields = array(
        "_product_test",
    );

    if ( \'edit.php\' != $pagenow || !is_admin() || $wp_query->query[\'post_type\'] != $post_type ) {
        return $search;
    }

    $get_post_ids = array();
    foreach ($custom_fields as $custom_field_name) {
        $args = array(
            \'posts_per_page\'  => -1,
            \'post_type\'       => $post_type,
            \'meta_query\' => array(
                array(
                    \'key\' => $custom_field_name,
                    \'value\' => $wp_query->query[\'s\'],
                    \'compare\' => \'LIKE\'
                )
            )
        );
        $posts = get_posts( $args );
        if(!empty($posts)){
            foreach($posts as $post){
                $get_post_ids[] = $post->ID;
            }
        }
    }
    $wp_query->set(\'post__in\', $get_post_ids);
    return $search;
}
add_filter( \'posts_search\', \'search_by_custom_field_for_admin\', 999, 2 );
更改后,您可以在屏幕截图中看到搜索结果

after changes

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post