Як налаштувати товари, пов’язані з торгівлею? [зачинено]


14

У мене на веб-сайті є наступні рядки коду, які відображатимуть відповідні продукти внизу моєї єдиної сторінки продуктів у WooCommerce ...

function.php:

// display upsells and related products within dedicated div with different column and number of products
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products',20);
remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products',10);
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

function woocommerce_output_related_products() {
    $output = null;

    ob_start();
    woocommerce_related_products(4,4); 
    $content = ob_get_clean();
    if($content) { $output .= $content; }

    echo '<div class="clear"></div>' . $output;
}

Оскільки він відображає 4 продукти, які були класифіковані під тим самим іменем, як я можу змінити вище, щоб замість цього відобразити відповідні теги ?

Наприклад, у мене є категорія товарів під назвою "Автомобільна", і в межах цієї категорії є кілька тегів - "Holden", "Ford", "Toyota", "Nissan" тощо.

Я хотів би, щоб вона відображала 4 продукти внизу, пов’язані з тегом продукту, який користувач переглядає зараз.

Відповіді:


29

По-перше , ви не можете відразу досягти поставленої мети за допомогою коду, який ви вказали у своєму запитанні. Щоб зрозуміти, чому немає прямого підходу до цього коду, вам слід поглянути на те, що ви використовуєте - woocommerce_related_products()- щоб зробити те, що ви робили до цього часу.

По-друге , ви повинні зрозуміти, бо в іншому випадку ви не можете задати точне питання, яке абсолютно повинно бути вашою метою, щоб переконатися, що ви отримаєте відповідь. Крім того, ви повинні мати на увазі, що Wordpress Development має свою основну сферу роботи щодо основних питань, що стосуються Wordpress - якщо вас цікавить, це обговорюється в Wordpress Development Meta , однією з конкретних тем є Наші питання та майбутнє плагінів платформи на WPSE . Отже, якщо ви ставите запитання щодо плагінів, як-от woocommerce, вам слід розбити його, щоб зробити його максимально пов’язаним із основними функціями - див. Наступний пункт - так як ви не можете очікувати, що люди будуть знати кожну деталь кожного плагіну, який ви використовую.

По-третє , тепер давайте глибше зрозуміти, що відбувається. Як ви сказали, ви зараз використовуєте woocommerce_related_products(). Якщо ви подивитесь на джерело, ви побачите, що ця функція використовується woocommerce_get_template()для отримання related.phpшаблону. woocommerce_get_template()знову використовує woocommerce_locate_template()для пошуку шаблону, останній робить це, використовуючи основну функцію wordpress locate_template().
Тепер існує з'єднання назад до основного, що призводить до усвідомлення того, що вищезгадані - і, сподіваємось, перевірені - функції комерційної торгівлі, по суті, є обгортками для розширення функціональності основної роботи. Ще одна річ, яка стала зрозумілою при аналізі функціональних залежностей - це те, що я говорив раніше, для досягнення поставленої мети вам потрібен інший підхід, тому що woocommerce_related_products()- зараз це безперечно очевидно - не є правильним.
Якщо ви слідували за мною за моїми поясненнями і до цього часу досконально читали, ви зрозуміли, що related.phpмістить те, що ви шукаєте. Я особливо говорю про get_related()функцію, яка включає woocommerce_product_related_postsгачок і використовує основні функції wp_get_post_terms()і get_posts()- get_related()використовується для отримання набору ідентифікаторів. Крім того , є woocommerce_related_products_argsгак, який може бути використаний , щоб змінити аргументи супутніх продукти запиту , всередині related.php, WP_Queryдля цього використовуються. У запиті використовуються отримані ідентифікатори від get_related()виклику.
Я думаю, у вас зараз все під рукою, щоб вирішити свою проблему. Насправді набагато більше, це дає майже повний огляд того, як налаштувати пов’язані продукти. Я не згадував про всі перевірені функціональні можливості - функції та / або гачок вихідного коду, але, безумовно, всі важливі. Тепер має бути зрозумілішим, як функціональні можливості супутніх комерційних товарів можна простежити до основних функцій Wordpress.

По-четверте , я заходжу, де ви повинні застосувати свої налаштування та що ви повинні попросити. Наприклад так:

Woocommerce має woocommerce_product_related_postsгачок, щоб налаштувати get_posts()виклик для визначення супутніх товарів.

Код:

        // Get the posts
        $related_posts = get_posts( apply_filters('woocommerce_product_related_posts', array(
                'orderby' => 'rand',
                'posts_per_page' => $limit,
                'post_type' => 'product',
                'fields' => 'ids',
                'meta_query' => $meta_query,
                'tax_query' => array(
                        'relation' => 'OR',
                        array(
                                'taxonomy' => 'product_cat',
                                'field' => 'id',
                                'terms' => $cats_array
                        ),
                        array(
                                'taxonomy' => 'product_tag',
                                'field' => 'id',
                                'terms' => $tags_array
                        )
                )
        ) ) );

Як я можу налаштувати це для досягнення своєї мети? Що означає показувати супутні товари, що належать до тієї ж категорії товарів - product_cat- і мають ті самі теги - product_tag-, що й окремий продукт.

Не даючи вам висновку - принаймні ні, якщо ви очікували отримати повний і готовий код - відповідь, перше, що ви, ймовірно, повинні зробити, - це змінити tax_queryпараметр relationз ORна AND.





Примітки:

  • Я зробив це більш детальною описовою відповіддю, маючи на увазі вищезазначене постійне обговорення
  • Сподіваюся, ви не заперечуєте, що це не лише відповідь на ваше запитання, але й додатково прагне досягти загальноосвітньої мети
  • це не перевірено , оскільки немає фактично готового коду
  • І останнє, але не менш важливо, передбачувано, що з випуском woocoomerce 2.1 будуть внесені деякі суттєві зміни коду, маючи це на увазі, але наразі станом на 2.0.19 наведений вище код є дійсним



Редагувати:

Ви дійсно не повинні редагувати (плагіни) основні класи безпосередньо. Це проблематично, тому що вам доведеться знову підтримувати зміни в оновленнях, оскільки основні файли оновлюються та перезаписуються, якщо ви їх виконуєте. Особливо, якщо це легко уникнути, як у цьому випадку, нижче код робить те, що ви мали намір робити у будь-якому випадку, тобто здійснюючи цю зміну через ваш functions.php.

Код:

    add_filter( 'woocommerce_product_related_posts', 
                'wpse_123436_change_wc_related_products_relation_to_and' );
    function wpse_123436_change_wc_related_products_relation_to_and() {
            $get_related_products_args = array(
                'orderby' => 'rand',
                'posts_per_page' => $limit,
                'post_type' => 'product',
                'fields' => 'ids',
                'meta_query' => $meta_query,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'product_cat',
                        'field' => 'id',
                        'terms' => $cats_array
                    ),
                    array(
                        'taxonomy' => 'product_tag',
                        'field' => 'id',
                        'terms' => $tags_array
                    )
                )
            );
            return $get_related_products_args;
    }



Для версії WooCommerce версії 2.1.0 і вище, вищезгаданий гак не працюватиме, оскільки він більше не існує, тому відповідь можна використовувати до версії 2.0.20. Але @NathanPowell виявив приємну відповідь на StackOverflow щодо наявної версії від v2.1.0 та для налаштування відповідного набору гачків .


Дуже дякую @ialocin за швидку та детальну відповідь. В якості тимчасового заходу, я просто змінив , ORщоб ANDв моєму wp-content/plugins/woocommerce/classes/abstract/abstract-wc-product.phpфайлі і незабаром часу змінити це зробити всередині functions.phpфайлу. Ще раз дякую вам.
користувач1752759

@ user1752759 Дивіться мою редакцію, щоб зробити це черезfunctions.php
Nicolai

Ідеальна відповідь! Його слід використовувати в будь-якому посібнику про те, як зрозуміти плагіни та як розширити їх до ваших потреб. Не впевнений, чи існують ці книги, але все ж :)
ThdK

@ThdK Дякую, я не знаю, чи це так добре, але прочитавши його вперше після його написання, я все ще задоволений відповіддю, окрім того, що я, безумовно, ціную комплімент, це завжди приємно почути :) ви пробували це з WC 2.1.x?
Миколай

Привіт, там @ialocin. Відредагованій версії в нижній частині відсутнє кілька дужок, що закриваються, і, на жаль, вже не працює як рішення у версії 2.1.8. Якщо не так вже й багато проблем, чи не могли б ви мені оновити це?
користувач1752759

2

Не давайте дурити себе тут, хлопці. Прийнята відповідь лише заставила користувача до своєї мети.

Перша проблема полягає тут:

<?php
// display upsells and related products within dedicated div with different column and number of    products
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products',20);
remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products',10);
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

Дія видаляється, а потім розміщується в точному положенні, з якого вона була видалена. Мета абсолютно незрозуміла.

Я зіткнувся з цим під час пошуку відповідних продуктів, тому що я не розумів, що TAGS і CATEGORIES - це те, що рухає woocommerce_output_related_productsфункцією в цьому плагіні.

Найкраща відповідь на це запитання - це наступне посилання, і все стосується woocommerce_output_related_products_args()фільтра: /programming/23554993/output-posts-reling-to-the-tags


Це насправді досить смішно. Чому ви можете запитати, адже якби ви уважно прочитали мою відповідь, то ви б побачили, вона використовує лише один фільтр. Якщо бути точним, єдиний доступний на той час фільтр, але ви б знали, що якби ви насправді прочитали те, що я написав, і знадобився б час, щоб подивитися вихідні файли різних версій. Просто кажу. Крім цього, відповідь, яку ви зв'язали, дуже добре пояснює нові доступні гачки sine v2.1.
Миколай

Вибачте, це було пізньої ночі. Я сподівався трохи пояснити про очевидну несправність коду в ОП.
Натан Пауелл

Не хвилюйтесь, але відчував, що мені потрібно щось сказати.
Миколай

Ваша довідкова посилання працювала на мене, Натан, дякую, намагаюся зробити це для себе вже 2 години. Тепер я знаю, як правильно застосовувати фільтри :)
marcovega
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.