Получить все товары с пользовательским атрибутом

29 июн. 2015 г., 10:46:31
Просмотры: 14.1K
Голосов: 5

Мне нужно сделать пользовательский запрос, чтобы получить все товары с определенным атрибутом (в моем случае "demo").

Запрос должен возвращать данные в таком формате:

a:5:{s:4:"demo";
a:6:{s:4:"name";
    s:4:"DEMO";
    s:5:"value";
    s:366:"ССЫЛКА НА ДЕМО";
    s:8:"position";
    s:1:"0";
    s:10:"is_visible";
    i:0;
    s:12:"is_variation";
    i:0;
    s:11:"is_taxonomy";
    i:0;
}

}

Я не знаю, как правильно составить $args для получения товаров. Хочу, чтобы $args выглядели примерно так:

    $args = array ( 
         'meta_query' => array( 
             array( 
              'key' => 'meta_value', 
              'value' => 'demo', 
              'compare' => 'LIKE', ), 
           ), 
   );

Спасибо!

0
Все ответы на вопрос 4
6

Вы указали key как meta_value. Это должно быть именем вашего метаполя. Имя, которое вы дали своим пользовательским полям или метаданным. Затем используйте следующий запрос.

$args = array ( 
         'post_type'  => 'your-post-type',
         'posts_per_page'  => -1,
         'meta_query' => array( 
             array( 
              'key' => 'demo', 
              'value' => '',
              'compare' => '!='
             ), 
           ), 
   );

По умолчанию параметр compare установлен в значение =

29 июн. 2015 г. 10:57:48
Комментарии

Спасибо, я хочу получить все продукты, у которых есть атрибут под названием 'demo'. Мне не нужно получать значение, потому что поле значения будет ссылкой. В любом случае, спасибо!

C.B. C.B.
29 июн. 2015 г. 11:37:49

@user2879109 Я обновил код. Пожалуйста, проверьте

Karun Karun
29 июн. 2015 г. 11:49:05

Нет, я попробовал, и у меня не работает. В моей таблице wp_postmeta.meta_value есть следующее:

a:5:{ s:4:"demo"; a:6:{s:4:"name"; s:4:"DEMO"; s:5:"value"; s:366:"ССЫЛКА НА ДЕМО"; s:8:"position"; s:1:"0"; s:10:"is_visible"; i:0; s:12:"is_variation"; i:0; s:11:"is_taxonomy"; i:0; } ... другие атрибуты }

C.B. C.B.
29 июн. 2015 г. 12:06:45

в любом из ваших постов, где есть этот демо-ключ. Можете выполнить get_post_meta(get_the_ID()); и показать возвращаемый массив.

Karun Karun
29 июн. 2015 г. 12:14:23

Я разобрался, спасибо за помощь!! Я написал следующий код:

C.B. C.B.
29 июн. 2015 г. 12:20:46

meta_key, который хранит атрибуты WooCommerce - это '_product_attributes'. Однако до сих пор нет конкретного способа поиска товаров по пользовательским атрибутам продукта.

gmatta gmatta
17 авг. 2016 г. 09:27:53
Показать остальные 1 комментариев
1

ОК, У МЕНЯ УЖЕ ПОЛУЧИЛОСЬ!! Урааа!

Огромное спасибо, ребята!!

У меня есть вот такой код:

$args = array ( 
     'post_type'  => 'product',
     'posts_per_page'  => -1,
     'meta_query' => array( 
         array( 
          'value' => 'demo', 
          'compare' => 'like'
         ), 
       ),
     ); 

Ну и это работает, по крайней мере у меня

Спасибо спасибо!!

С наилучшими пожеланиями!

29 июн. 2015 г. 12:13:40
Комментарии

Просто для тех, кто ищет похожее решение: этот код не будет работать в большинстве случаев. Возможно, он работал в конкретной ситуации.

gmatta gmatta
17 авг. 2016 г. 09:26:28
4

попробуйте что-то вроде этого

$args = array(
    "post_type" => "product",
    "meta_query" => array(
        array(
            "key"     => "demo",
            "value" => "abc",
            "compare" => "EXISTS",
        ),
    ),
);
$query = new WP_Query( $args );
29 июн. 2015 г. 10:56:43
Комментарии

Спасибо, но я всё ещё получаю 0 результатов

C.B. C.B.
29 июн. 2015 г. 11:36:06

Добавьте "value" => "abc" рядом с "key" и "compare". В документации упоминается возможный баг, но мне не совсем понятно, нужно ли "value" или нет (я изменил код выше)

mmm mmm
29 июн. 2015 г. 12:02:05

Я разобрался! Твой код и код karun очень помогли! Спасибо.

C.B. C.B.
29 июн. 2015 г. 12:19:06

meta_key, в котором хранятся атрибуты WooCommerce - это '_product_attributes'. Однако нет конкретного способа для поиска товаров на основе пользовательских атрибутов продукта.

gmatta gmatta
17 авг. 2016 г. 09:31:12
0

Я знаю, что это старый метод, но чистый SQL, вот мои решения:

Получить все метаданные для товара:

SELECT meta_key, meta_value FROM wp_postmeta WHERE wp_postmeta.post_id = 626

Получить товары с определенными метаданными

SELECT p.id, p.post_title, m.meta_key, m.meta_value FROM wp_posts p 
INNER JOIN wp_postmeta m ON p.id=m.post_id AND m.meta_key='_auction_dates_to'

ДОБАВИТЬ ДЛЯ ПОЛУЧЕНИЯ МЕТАДАННЫХ КОНКРЕТНОГО ТОВАРА

AND p.id=626

Добавить для получения конкретного значения метаполя

AND m.meta_value='today'
14 дек. 2018 г. 16:56:58