Где хранятся значения терминов атрибутов продукта WooCommerce в базе данных - PullRequest
0 голосов
/ 16 мая 2019

Woocommerce хранит значение многих атрибутов продукта в виде пустой строки.

Вот пример того, что отображается в базе данных для _product_attributes:

a:1:{s:5:"brand";a:6:{s:4:"name";s:5:"brand";s:5:"value";s:0:"";s:11:"is_taxonomy";i:1;s:8:"position";i:0;s:10:"is_visible";i:1;s:12:"is_variation";i:0;}}

Я правильно добавил атрибуты продукта в разделе данных продукта в WordPress. Я не редактировал код php вообще. Как мне заставить его действительно хранить правильные значения атрибутов продукта?

1 Ответ

0 голосов
/ 16 мая 2019

Значения атрибута продукта хранятся не в таблице wp_post_meta, а в wp_term_relationships.

Также при просмотре ваших сериализованных данных есть что-то странное: все атрибуты продукта таксономии всегда начинаются с pa_, как в этом примере:

a:1:{s:8:"pa_color";a:6:{s:4:"name";s:8:"pa_color";s:5:"value";s:0:"";s:8:"position";i:0;s:10:"is_visible";i:0;s:12:"is_variation";i:1;s:11:"is_taxonomy";i:1;}}

Чтобы получить значения из динамического идентификатора продукта для данной brand таксономии, вы можете использовать:

$taxonomy = 'brand';
$terms = wp_get_post_terms( $product_id, $taxonomy );

// Loop through WP_Term objects
foreach ( $terms as $term ) {
    $term_id   = $term->term_id;
    $term_name = $term->name;
    $term_slug = $term->slug;
}

Или с SQL-запросом с использованием класса WPDB (из динамического идентификатора продукта) :

global $wpdb;

$taxonomy   = 'brand'; // The taxonomy
$product_id = 37; // The product ID

$terms = $wpdb->get_results( $wpdb->prepare("
    SELECT t.term_id, t.name, t.slug
    FROM {$wpdb->prefix}terms t
    INNER JOIN {$wpdb->prefix}term_taxonomy tt
        ON t.term_id = tt.term_id
    INNER JOIN {$wpdb->prefix}term_relationships tr
        ON tt.term_taxonomy_id = tr.term_taxonomy_id
    WHERE tt.taxonomy = '%s'
    AND tr.object_id = %d
", $taxonomy, $product_id ) );

// Raw output
var_dump($terms);

Итак, как вы можете видеть, SQL-запрос использует wp_terms, wp_term_taxonomy и wp_term_relationships. Идентификатор продукта запрашивается через таблицу wp_term_relationships в столбце object_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...