поиск нескольких sku на стороне администратора woocommerce - PullRequest
0 голосов
/ 05 июня 2018

Это звучит просто, но если у вас есть сотни продуктов и вам нужно искать несколько sku на стороне администратора woocommerce, то это не доступно.Допустим, вам нужно проверить 600 продуктов, вам необходимо: вручную добавить один sku в строку поиска. Нажмите кнопку «Поиск», чтобы снова начать поиск результатов, разделив их пробелом, пробелом или тире.

Я искал, и ни у кого нет ответа, или они задают вопросы без ответа.Как люди могут искать несколько sku, или названия продуктов на стороне администратора woocommerce?

1 Ответ

0 голосов
/ 06 июня 2018

Во-первых .. вы упомянули, что вам нужно проверить много продуктов (600), требующих многократного поиска sku.Мне кажется, ты собираешься сделать это вручную?Я рекомендую создать цикл продукта в PHP, где вы проверяете вещи.Это, вероятно, сэкономит вам много времени, и вы можете использовать его снова.


Теперь к проблеме ... Ищите продукты, используя несколько sku.

Я согласен со многимиИнформация в интернете вводит в заблуждение.Я делал это раньше, и я всегда использовал хук pre_get_posts, чтобы изменить запрос WP (поиск) перед его выполнением.

После тестирования кажется, что запрос не настраивается как поиск, изначение поиска пусто ...

Таким образом, woocommerce должна выполнить пользовательский поисковый запрос.К счастью, я быстро нашел сообщение mircian.

WooCommerce использует хранилище данных для своих типов сообщений (продукты, заказы и т. Д.), А поиск также выполняется с помощью пользовательской функции.В этом случае он называется search_products и выполняет пользовательский запрос, который в основном возвращает массив идентификаторов, которые будут использоваться для результатов.

Я изменил его функцию для поиска с несколькими sku.Вставьте функцию в functions.php вашей (дочерней) темы.

Используйте '|'в качестве разделителя SKU.Пример: '1234 | 1235 | 1236'

Проверено на:

  • Wordpress 4.9.6
  • Woocommerce 3.3.5

/**
 * Use multiple sku's to find WOO products in wp-admin
 * NOTE: Use '|' as a sku delimiter in your search query. Example: '1234|1235|1236'
**/
function woo_multiple_sku_search( $query_vars ) {

    global $typenow;
    global $wpdb;
    global $pagenow;

    if ( 'product' === $typenow && isset( $_GET['s'] ) && 'edit.php' === $pagenow ) {
        $search_term = esc_sql( sanitize_text_field( $_GET['s'] ) );

        if (strpos($search_term, '|') == false) return $query_vars;

        $skus = explode('|',$search_term);

        $meta_query = array(
            'relation' => 'OR'
        );
        if(is_array($skus) && $skus) {
            foreach($skus as $sku) {
                $meta_query[] = array(
                    'key' => '_sku',
                    'value' => $sku,
                    'compare' => '='
                );
            }
        }

        $args = array(
            'posts_per_page'  => -1,
            'post_type'       => 'product',
            'meta_query'      => $meta_query
        );
        $posts = get_posts( $args );

        if ( ! $posts ) return $query_vars;

        foreach($posts as $post){
          $query_vars['post__in'][] = $post->ID;
        }
    }

    return $query_vars;
}
add_filter( 'request', 'woo_multiple_sku_search', 20 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...