как упорядочение по идентификатору не рандомизирует связанный продукт Woocommerce - PullRequest
0 голосов
/ 02 июня 2018

Woocommerce отображает на странице одного продукта по умолчанию раздел коррелированного продукта, он получает в случайном режиме 4 продукта с той же категорией или тегом.

Таким образом, каждый раз, когда вы перезагружаете страницу или посещаете страницу на следующий деньон отображает каждый раз разные коррелированные продукты, это не очень хороший вариант для SEO, потому что таким образом не пропускается сок ссылок между страницами в течение времени.

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

из того, что я понимаю, woocommerce экстраполирует связанные продукты случайным образом с помощью функции orderby = 'rand' в запросе

затем попытался найти фильтр, который мог бы изменить это значение в orderby = 'ID' или orderby = 'post__in', используя этот фрагмент в function.php темы:

add_filter('woocommerce_output_related_products_args', 'wh_related_products_args');

    function wh_related_products_args($args)
    { 
            $args['orderby'] = 'ID'; // or  $args['orderby'] = 'post__in';

        return $args;
    }

, но этоне работает

код в related.php таков:

<?php
/**
 * Related Products
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see         https://docs.woocommerce.com/document/template-structure/
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     3.0.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

if ( $related_products ) : ?>

    <section class="related products">

        <h2><?php esc_html_e( 'Related products', 'woocommerce' ); ?></h2>

        <?php woocommerce_product_loop_start(); ?>

            <?php foreach ( $related_products as $related_product ) : ?>

                <?php
                    $post_object = get_post( $related_product->get_id() );

                    setup_postdata( $GLOBALS['post'] =& $post_object );

                    wc_get_template_part( 'content', 'product' ); ?>

            <?php endforeach; ?>

        <?php woocommerce_product_loop_end(); ?>

    </section>

<?php endif;

wp_reset_postdata();

что я делаю не так?

1 Ответ

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

Добавьте приведенный ниже код в 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' => 'id', // you can place id,title over here. 
              'order'     => 'ASC',
            );
   return $get_related_products_args;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...