Как создать шорткод недавно просмотренных продуктов WooCommerce

Опубликовано: 2021-05-05

Шорткод недавно просмотренных продуктов WooCommerce Вы ищете способ отображать недавно просмотренные продукты с помощью шорткода? В этом посте я хочу показать вам, как создать шорткод недавно просмотренных продуктов WooCommerce. По умолчанию WooCommerce позволяет использовать виджет для отображения списка продуктов, которые покупатель недавно просматривал.

Это встроенное решение очень эффективно, и мы верим, что скоро оно станет блоком Гутенберга.

Однако вы можете отобразить сопутствующие товары на новой странице. Это означает, что вам нужно создать шорткод.

Шорткод недавно просмотренных продуктов WooCommerce

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

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

Вы также должны создать дочернюю тему, чтобы ваши изменения не потерялись во время обновления.

Давайте посмотрим, как вы можете этого добиться.

Шаги по добавлению шорткода недавно просмотренных продуктов

Чтобы создать шорткод, мы воспользуемся преимуществами существующего шорткода [products] и «передадим» ему идентификаторы продуктов без необходимости изобретать велосипед.

Кроме того, вы можете создать плагин, который регистрирует шорткод в теме. Мы воспользуемся этим методом, так как он самый простой.

Вам нужно создать новую папку с названием плагина.

Если вы не видите недавних продуктов, это потому, что вам все еще нужно активировать виджет «Недавно просмотренные продукты». Файл cookie «woocommerce_recently_viewed» сохраняется только тогда, когда используется виджет недавно просмотренных продуктов.

Наиболее важные данные, которые нам нужны, хранятся в файлах cookie с именем $_COOKIE['woocommerce_recently_viewed'].

Вы можете включить свой собственный код для отслеживания/создания файлов cookie, если хотите:

function custom_track_product_view() {

    if ( ! is_singular( 'product' ) ) {

        return;

    }

    global $post;

    if ( empty( $_COOKIE['woocommerce_recently_viewed'] ) )

        $viewed_products = array();

    else

        $viewed_products = (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] );

    if ( ! in_array( $post->ID, $viewed_products ) ) {

        $viewed_products[] = $post->ID;

    }

    if ( sizeof( $viewed_products ) > 15 ) {

        array_shift( $viewed_products );

    }

    // Store for session only

    wc_setcookie( 'woocommerce_recently_viewed', implode( '|', $viewed_products ) );

}

add_action( 'template_redirect', 'custom_track_product_view', 20 );

Вот полный код плагина:


function njengah_woocommerce_recently_viewed_products( $atts, $content = null ) {

// Get shortcode parameters

extract(shortcode_atts(array(

"per_page" => '5'

), $atts));

// Get WooCommerce Global

global $woocommerce;

// Get recently viewed product cookies data

$viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array();

$viewed_products = array_filter( array_map( 'absint', $viewed_products ) );

// If no data, quit

if ( empty( $viewed_products ) )

return __( 'You have not viewed any product yet!', 'rc_wc_rvp' );

// Create the object

ob_start();

// Get products per page

if( !isset( $per_page ) ? $number = 5 : $number = $per_page )

// Create query arguments array

$query_args = array(

'posts_per_page' => $number,

'no_found_rows'  => 1,

'post_status'    => 'publish',

'post_type'      => 'product',

'post__in'       => $viewed_products,

'orderby'        => 'rand'

);

// Add meta_query to query args

$query_args['meta_query'] = array();

// Check products stock status

$query_args['meta_query'][] = $woocommerce->query->stock_status_meta_query();

// Create a new query

$r = new WP_Query($query_args);

// If query return results

if ( $r->have_posts() ) {

$content = '<ul class="rc_wc_rvp_product_list_widget">';

// Start the loop

while ( $r->have_posts()) {

$r->the_post();

global $product;

$content .= '<li>

<a href="' . get_permalink() . '">

' . ( has_post_thumbnail() ? get_the_post_thumbnail( $r->post->ID, 'shop_thumbnail' ) : woocommerce_placeholder_img( 'shop_thumbnail' ) ) . ' ' . get_the_title() . '

</a> ' . $product->get_price_html() . '

</li>';

}

$content .= '</ul>';

}

// Get clean object

$content .= ob_get_clean();




// Return whole content

return $content;

}

// Register the shortcode

add_shortcode("woocommerce_recently_viewed_products", "njengah_woocommerce_recently_viewed_products");

После добавления кода добавьте [woocommerce_recently_viewed_products per_page=”5″] на любую страницу.

Это результат: исход

Вывод

В этом кратком руководстве мы поделились тем, как отображать недавно просмотренные продукты с помощью шорткода.

Вы должны быть осторожны при редактировании файла functions.php, потому что, если вы допустите ошибку, он отобразит критическую ошибку.

Похожие статьи

  1. Более 100 советов, подсказок и фрагментов Ultimate WooCommerce Hide Guide
  2. Как использовать шорткоды WordPress на страницах или в сообщениях с примером
  3. Как настроить бесплатную доставку с минимальными затратами в WooCommerce