WooCommerce Недавно просмотренные товары
В woocommerce есть замечательный виджит, как недавно просмотренные товары, но его можно добавить только в виджиты, но что делать если хочется его добавить в низ страници или вверх или в контент? Не плохо было бы иметь под рукой универсальный шорткод.
Сегодня я расскажу как написать такой шорткод, мы его будем делать непосредственно с помощью создания плагина, а не добавления куска кода в functions.php вашей темы, делается это для того чтобы не было привязки к теме, и вы можете легко менять тему и обновляться, не боясь что эта надстройка следит.
И так приступим, создадим папку woocommerce-recently-viewed-products в ней файл recently-viewed-products.php
и в этот файл вставляем
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
<?php /* Plugin Name: WooCommerce - Recently Viewed Products Plugin URL: http://woocommerce-russian.ru Description: Добавляет шорткод для вывода просмотренных товаров покупателем Version: 1.0 Author: Denis Petrovsky Author URI: http://woocommerce-russian.ru Contributors: corsonr Text Domain: rc_wc_rvp Domain Path: languages */ /** * Register the [woocommerce_recently_viewed_products per_page="5"] shortcode * * This shortcode displays recently viewed products using WooCommerce default cookie * It only has one parameter "per_page" to choose number of items to show * * @access public * @since 1.0 * @return $content */ function rc_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 __( 'Вы еще не смотрели не одного продукта', '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 style="width: 20%; clear: left; text-align: center;display: inline-block;"> <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>'; } '</ul>'; } // Get clean object $content .= ob_get_clean(); // Return whole content return $content; } // Register the shortcode add_shortcode("woocommerce_recently_viewed_products", "rc_woocommerce_recently_viewed_products"); |
Сохранять файл нужно в кодировке UTF8 — БЕЗ ВОМ
Углубляться что какая функция делает не буду, расскажу немного о стилях выравнивания товаров,
1 |
<li style="width: 20%; clear: left; text-align: center; display: inline-block;"> |
стиль выравнивает товары в линию width: 20%; отвечает за размер я рассчитывал чтобы смотрелось красиво при выведении 5 товаров, если у вас будет больше или меньше товаров для отображения, то подгоняйте под свой вкус.
Установка нашего плагина.
Созданную нами папку с файлом перенесите через FTP клиент в папку /wp-content/plugins/ и через админ панель активируйте его
Все наш плагин готов к работе, в любом месте на странице можно теперь вставить шорткод и плагин будет выводить просмотренные товары
[woocommerce_recently_viewed_products per_page=»5″]
Денис, спасибо за код. Как автоматически вывести этот список под контентом? Привязаться к ? Как?
так этим способом мы создаем шорткод [woocommerce_recently_viewed_products per_page=”5″] вот его и вставляйте в запись, или в цикл вывода записей
Добрый день!
Вызывает ошибку при активации плагина. Как можно исправить?
Parse error: syntax error, unexpected ‘function’ (T_FUNCTION) in /home/c/cl25046/public_html/wp-content/plugins/woocommerce-recently-viewed-products/recently-viewed-products.php on line 24
Скорей всего конфликт плагинов или темы
Я не знаю, в UTF8 — БЕЗ ВОМ вы сохраняли свой текст или с ВОМ, но ваш код приходится перековыривать, чтобы сразу использовать. Все спецсимволы типа ‘/» заменены на html коды: https://yadi.sk/i/2fORsyyZ3P6psb
Активировал плагин (а вы об этом не написали), но на месте шорткода неизменно висит «Вы еще не смотрели ни одного продукта»
Доброго времени. Помогите пожалуйста, как в виджете «Недавно просмотренные товары» убрать вторую цену, то есть оставить только минимальную?