Как получить сгруппированный идентификатор продукта из связанного продукта в woocommerce

У меня есть сгруппированный продукт товар-1, который имеет много связанных продуктов:

-продукт-1 (сгруппированный товар)

  • | __ product-2 (простой или переменный продукт)
  • | __ product-3 (простой или переменный продукт)

Я хочу получить идентификатор продукта-1, используя идентификатор продукта-2

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
2 168
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не можете получить идентификатор продукта определенного сгруппированного продукта через один из его идентификаторов дочерних продуктов, поскольку каждый дочерний элемент может входить во множество разных сгруппированных продуктов.

Единственные данные, которые определяют IDS дочерних продуктов для сгруппированного продукта, находятся в таблице wp_postmeta вокруг meta_key_children в виде массива идентификаторов дочерних продуктов.

Теперь, если дочерний идентификатор продукта, который вы хотите использовать для получения идентификатора родительского сгруппированного продукта, является дочерним элементом только одного уникального сгруппированного продукта, вы можете использовать следующий SQL-запрос, встроенный в функцию:

function get_parent_grouped_id( $children_id ){
    global $wpdb;
    $results = $wpdb->get_col("SELECT post_id FROM {$wpdb->prefix}postmeta
        WHERE meta_key = '_children' AND meta_value LIKE '%$children_id%'");
    // Will only return one product Id or false if there is zero or many
    return sizeof($results) == 1 ? reset($results) : false;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

ИСПОЛЬЗОВАНИЕ

Здесь ниже 738 - это один из продуктов для детей, ид. Это также может быть динамическое значение, передаваемое через переменную.

$parent_grouped_id = get_parent_grouped_id( 738 );

ДОПОЛНЕНИЕ - Получите все сгруппированные продукты, используя WC_Product_Query:

  1. Массив сгруппированных товаров Объекты:

    $ grouped_products = wc_get_products (массив ('limit' => -1, 'type' => 'grouped'));

  2. Только массив сгруппированных товаров IDS:

    $ ids = wc_get_products (array ('limit' => -1, 'type' => 'grouped', 'return' => 'ids'));

Спасибо за ответ, как мне получить список сгруппированных продуктов с помощью wp_query, я новичок в wordpress.

ali taha 10.09.2018 01:21

Ты потрясающий, это то, что я искал.

ali taha 10.09.2018 01:50

@alitaha Хорошо, я добавил дополнение, чтобы получить все сгруппированные продукты в WC_Product_Query

LoicTheAztec 10.09.2018 01:51

Я немного проработал предыдущий правильный ответ @LoicTheAztec и добавил к нему некоторое кеширование, чтобы избежать множественных запросов к базе данных. Написал это для своего проекта, просто поделился им с вами - не будь суров со мной, я здесь новичок. Спасибо @LoicTheAztec за его первоначальный ответ.

if ( ! function_exists( 'wc_get_parent_grouped_id' ) ) {

function wc_get_parent_grouped_id( $id ){

    global $wpdb;

    $cdata = wp_cache_get( __FUNCTION__, 'woocommerce' );

    if ( ! is_array($cdata) )
        $cdata = array();

    if ( ! isset($cdata[$id]) ) {

        $cdata[$id] = $parent_id = $children = false;

        $qdata = $wpdb->get_row("SELECT post_id, meta_value
                                 FROM $wpdb->postmeta
                                 WHERE meta_key = '_children' 
                                 AND meta_value LIKE '%$id%'");

        if ( is_object($qdata) ) {

            $parent_id = $qdata->post_id;
            $children = $qdata->meta_value;

            if ( is_string($children) )
                $children = unserialize($children);

            if ( is_array($children) && count($children) > 0 )
                foreach ($children as $child_id)
                    $cdata[$child_id] = $parent_id;
        }

        wp_cache_set( __FUNCTION__, apply_filters( __FUNCTION__ . '_filter', $cdata, $id, $parent_id, $children, $qdata ), 'woocommerce' );
    }

    return $cdata[$id];
}

}

Другие вопросы по теме