Поддержка Проблемы и решения Как создать два шаблона вывода товаров в woocommerce?

  • У меня есть несколько категорий товара: медицинская одежда мужская и женская, бейджи, обувь. Все эти карточки товаров должны выводиться по своему шаблону. Тоесть:
    1. На каждой странице товаров категории «Женская одежда» должна выводится Таблица размеров женской фигуры.
    2. На странице товаров категории «Мужская одежда» должна выводится Таблица размеров мужской фигуры.
    3. На странице товара «обувь» должна размерная сетка выводится(желательно для каждой марки своя).
    4. На каждой странице товара «Бейдж» должна выводится ссылка на создание макета.

    Вручную с помощью шорткодов добавил таблицы размеров. Но это рутинная работа, да и когда измениться что-то, то прийдеттся править каждый товар отдельно. Как создать шаблоны woocommerce, что бы все что одинаковое выводилось постоянно и при надобности править только один файл.

    Пробовал WP Custom Post Template, но ничего не получается… Помогите, буду очень благодарен….

    Ссылка на сайт: medshvetsmarka.com.ua

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Неужели никто не сталкивался с таким вопросом? Уже неделю борюсь с ним. Подскажите в каком направлении двигаться или дайте ссылку.

    Либо вы проблему свою описываете неправильно, либо одно из двух )
    Таблицы это справочная информация о размерах или информация о наличии тех или иных размеров продукта?
    Используете ли вы для вывода категории свои страницы с щорткодами или дефолтные страницы категорий? Используете ли вы атрибуты товаров и вариации товаров?
    ps Хотел сайт посмотреть, но открывается с 500 ошибкой

    Таблицы это информация о размерах.
    Использую дефолтные страницы категорий.
    Да использую атрибуты товаров. Использую и вариации продукции, но пока только на бейджах.
    Но мне нужно изменять не страницу категорий а именно страницу ОДНОГО товара, который находится в определенной категории.

    Например:
    Есть товар: Халат 12-02, халат 15-02 эти страницы по одному шаблону выводятся.
    Товар Бейдж Стоматолога, Бейдж Хирурга …. Они выводится по другому шаблону.

    Спасибо за внимание.
    А 500 ошибка это с хостером проблемы — уже как второй день они никак не могут решить свою проблему.

    тогда еще раз. Если я правильно понял, то требуется следующее. Есть некая справочная информация, которую нужно отображать на определенных страницах. Эта информация иногда требует внесения изменений. И желательно чтоб после изменений (в каком-то одном месте) это автоматом отобразилось во всех местах, где эта информация используется. Так?

    Решение от пользователя Apathetic с одного неправильного ресурса
    =========начало ======
    Написал небольшую функцию для вывода любых данных любой записи/поста в любом месте. Она действительно очень простая, но заметно упрощает жизнь, когда нужно, к примеру, собрать главную страницу из десятка больших и не очень блоков.

    function main_content($page_ID, $field, $custom = false){
        if ($custom == false) {
            $main_content = get_post( $page_ID, ARRAY_A );
            $text = $main_content['post_' . $field];
        } elseif ($custom == true) {
            $text = get_post_meta( $page_ID, $field, true );
        }
        echo $text;
    }

    Соответственно, чтобы вывести, например, тело страницы с ID 5:
    <?php main_content('5', 'content'); ?>

    Кроме того, добавил шорткод, чтобы использовать эту функцию непосредственно в записях:

    function main_content_shortcode( $atts, $content = null ){
        extract(shortcode_atts( array(
            'id' => 1,
            'field' => 'title',
            'custom' => false
        ), $atts));
        main_content($id, $field, $custom);
    }
    add_shortcode('content', 'main_content_shortcode');

    Шорткод, например, такой: [content id="15" field="content"]
    Нетрудно заметить, что функция и шорткод поддерживают так же и произвольные поля — нужно только указать его название и передать функции true.

    ===== окончание====

    Полезная функция. Добавлю в закладки.
    Я сейчас и выводу таблицы размеров шорткодом.

    Мне нужно что-то вроде макета страницы для товара:
    Допустим то есть создать еще один макет страницы товара страницы.
    Например:
    Создаешь страницу — и в разделе макет страницы выбираешь: Справым сайдбаром, без садбара и тд и тп.
    Так хочу и для товара, что бы можно было выбрать макет, а в идеальном варианте, что бы это все было автоматически, определяя по принадлежности к той или иной категори — выбирать нужный макет страницы отличительный от остального.

    Надо определиться в терминологии макет это макет. Его выбор доступен как для страниц, так и для записей(товар это запись). Шаблон это шаблон, выбрать можно только для страниц из заранее определенного списка. Каким образом сделать свой шаблон расписано здесь
    Для записей(товаров) эти возможности ограничены, ну или требуют неких доп действий, например использование фильтра
    Как пример, подсовывание своего шаблона для товара, у которого id товарной категории 6

    add_filter( 'template_include', 'mmm' );
    function mmm($templ){
         $templ1='';
         global $post;
    
        if(!$post) return $templ;
        else {
            $terms = array_shift(wc_get_product_terms( $post->ID, 'product_cat'));
            if(6==$terms->id)
            $templ1=str_replace(".php","-57.php",$templ) ;
    
        }
    	return $templ;
    }

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

    Спасибо. Буду пробовать разобраться. Сделаю — отпишусь как сделал.

    Создал файл в cat-47.php в папке с темой. Немного изменил его внешний вид снизу выводится информация по бейджам, проверял на шаблону по умолчанию, тоесть выводилось на всех страницах товаров(халаты, одежда бейджи)). Добавил тот код, что Вы дали изменил 6 на 47 и 57 на 47. Но ничего не сработало… Что-то я не совсем разобрался((( Подскажите, что не так?
    Вот код

    add_filter( 'template_include', 'mmm' );
    function mmm($templ){
         $templ1='';
         global $post;
    
        if(!$post) return $templ;
        else {
            $terms = array_shift(wc_get_product_terms( $post->ID, 'product_cat'));
            if(47==$terms->id)
            $templ1=str_replace(".php","-47.php",$templ) ;
    
        }
    	return $templ;
    }
    
    /**
     * The template for displaying product content in the single-product.php template
     *
     * Override this template by copying it to yourtheme/woocommerce/content-single-product.php
     *
     * @author 		WooThemes
     * @package 	WooCommerce/Templates
     * @version     1.6.4
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly
    }
    
    ?>
    
    <?php
    	/**
    	 * woocommerce_before_single_product hook
    	 *
    	 * @hooked wc_print_notices - 10
    	 */
    	 do_action( 'woocommerce_before_single_product' );
    
    	 if ( post_password_required() ) {
    	 	echo get_the_password_form();
    	 	return;
    	 }
    ?>
    
    <div itemscope itemtype="<?php echo woocommerce_get_product_schema(); ?>" id="product-<?php the_ID(); ?>" <?php post_class(); ?>>
    
    	<?php
    		/**
    		 * woocommerce_before_single_product_summary hook
    		 *
    		 * @hooked woocommerce_show_product_sale_flash - 10
    		 * @hooked woocommerce_show_product_images - 20
    		 */
    		do_action( 'woocommerce_before_single_product_summary' );
    	?>
    
    	<div class="summary entry-summary">
    
    		<?php
    			/**
    			 * woocommerce_single_product_summary hook
    			 *
    			 * @hooked woocommerce_template_single_title - 5
    			 * @hooked woocommerce_template_single_rating - 10
    			 * @hooked woocommerce_template_single_price - 10
    			 * @hooked woocommerce_template_single_excerpt - 20
    			 * @hooked woocommerce_template_single_add_to_cart - 30
    			 * @hooked woocommerce_template_single_meta - 40
    			 * @hooked woocommerce_template_single_sharing - 50
    			 */
    			do_action( 'woocommerce_single_product_summary' );
    		?>
            <?php
    		/**
    		 * woocommerce_after_single_product_summary hook
    		 *
    		 * @hooked woocommerce_output_product_data_tabs - 10
    		 * @hooked woocommerce_upsell_display - 15
    		 * @hooked woocommerce_output_related_products - 20
    		 */
    		do_action( 'woocommerce_after_single_product_summary' );
    	?>
    
    	</div><!-- .summary -->
        <div class="clear"></div>
        <!--то что должно отобаражаться только на страницах  товара бейдж -->
    
    <div class="beidj"><img src="http://navistom.com/uploads/images/editor/70334026_head02.jpg"></div>
    
    <meta itemprop="url" content="<?php the_permalink(); ?>" />
    
    </div><!-- #product-<?php the_ID(); ?> -->

    Я не подумал, что вы его буквально будете использовать. ))
    там в функции в самом конце
    return $templ;

    надо заменить на
    return $templ1;
    иначе функция просто возвращает первоначальное значение

    я использую свою адаптированную тему и все вызовы шаблонов у меня идут через woocommerce.php

    и не все так просто.. при таком использовании если у продукта будет 47 категория wp будет искать все участвующие шаблоны с приставкой -47
    сначала single-product-47.php
    в нем идет вызов content-single-product-47.php

    пока не вносите никаких изменений.
    установите плагин Display Template Name. в верхней панели будете видеть что за шаблон используется в том или ином случае, а при наведении на него -список всех шаблонов участвующих в запросе.
    после этого и принимайте решение как, что менять и при каких условиях.

    и меняйте приставку на что-нибудь другое, а то при запросе продукта с id=47 неважно какоой категории, и при наличии шаблона с -47.php будет открываться он (это механизм wp)

    почитал твое сообщение на тематическом форуме.. МАЛАДЕЦ.

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

    Здравствуйте!

    Добавляю ваш код, с return $templ1; выводит белую страницу у прописаной категории -790.

    Так же добавил новый шаблон single-product-790.php

    Все правильно сделал или может еще что надо?

    За ранее спасибо за ответ!

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Тема «Как создать два шаблона вывода товаров в woocommerce?» закрыта для новых ответов.