16ответ(ов) в теме
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
1
13:04

По умолчанию кнопка купить и цена выводятся на странице товара с помощью фильтра: add_filter('the_content','rcl_add_product_box',10);

Подскажите пожалуйста как кастомно вывести данный блок в шаблоне темы без привязки к the_content ?
Первое это отменяем фильтр: remove_filter('the_content','rcl_add_product_box',10);
Далее пробовал переопределить вывод с помощью add_action и do_action, но не получается, маловато опыта в этом...

Функции, что за это отвечают, находятся здесь: commerce/content/product-box.php
Вот весь код из файла:

<?php

add_filter('the_content','rcl_add_product_box',10);
function rcl_add_product_box($content){
    global $post, $rmag_options;
    
    if($post->post_type != 'products' || doing_filter('get_the_excerpt')) return $content;
    
    if(doing_filter('the_content')){
        
        $productCart = (isset($rmag_options['cart_button_single_page']))? $rmag_options['cart_button_single_page']: array('top','bottom');
        
        if(!in_array('top',$productCart)) return $content;
        
    }
    
    $content = rcl_get_product_box($post->ID).$content;
    
    return $content;
}

add_action('product_template', $content );

function rcl_get_product_box($product_id){
    
    $cartBox = new Rcl_Cart_Button_Form(array(
        'product_id' => $product_id
    ));
    
    $content = '<div id="rcl-product-box">';

        if(get_post_meta($product_id, 'recall_slider', 1)){
            
            $content .= '<div class="product-gallery">';

                $content .= rcl_get_product_gallery($product_id);

            $content .= '</div>';
            
        }
        
        $content .= '<div class="product-metabox">';

            $content .= $cartBox->cart_form(); 
            
        $content .= '</div>';
    
    $content .= '</div>';
    
    return $content;
    
}


Первая функция определяет в каком месте осуществлять вывод до или после the_content, эта опция есть в настройках дополнения.

0
Вова (Otshelnik-Fm)
не в сети 17 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18642
2
13:06

Тему перенес. Вопрос кастомизации

0
Вова (Otshelnik-Fm)
не в сети 17 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18642
3
16:11

[productlist] шорткод вам не подходит?
Или вот похожие темы форума

Вы не можете просматривать опубликованные ссылки

Вы не можете просматривать опубликованные ссылки

Вы пишите подробно что вам нужно - а то вы даете выдержки из файлов - а может оно совсем не то что вы ищите

0
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
4
16:41

Спасибо за ответ, наверное, не достаточно подробно описал задачу...

Кнопка купить на странице товара выводиться с помощью фильтра непосредственно в
<?php the_content(); ?>. Привел выше код из дополнения магазина, где формируется данный фильтр.

Мне необходимо вывести кнопку покупки на странице товара кастомно, через новую функцию, совсем не привязываясь к the_content.

0
Вова (Otshelnik-Fm)
не в сети 17 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18642
5
16:47

Otshelnik-Fm сказал(а)
[productlist] шорткод вам не подходит?

0
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
6
17:32

Otshelnik-Fm сказал(а)
[productlist] шорткод вам не подходит?

Нет, это не то, список товара не нужен. Необходимо кастомно вывести на странице товара (допустим single.php) блок с кнопкой "В корзину" и ценой

0
Андрей CS
не в сети 18 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
7
17:59

получаем код кнопки "В корзину" и возвращаем его:

global $post;

$CartButton = new Rcl_Cart_Button_Form(array(
	'product_id' => $post->ID
));

return $CartButton->cart_form();

0
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
8
20:13

Андрей CS сказал(а)
получаем код кнопки "В корзину" и возвращаем его:

global $post;

$CartButton = new Rcl_Cart_Button_Form(array(
	'product_id' => $post->ID
));

return $CartButton->cart_form();

А можете пожалуйста подробней, куда этот код и как вывести? По разному пробовал, не выходит...

0
Вова (Otshelnik-Fm)
не в сети 17 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18642
9
20:25

Ну куда... куда вы хотите выводить - туда и вставляйте.
Вы данный код дебажили? Переменная пост у вас что-то содержит?

0
Андрей CS
не в сети 18 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
10
20:48

ну вы же хотели вывести кнопку за пределами the_content(), тогда видимо должны сами знать где надо разместить этот код, я так думаю, что в файле single-products.php или single.php, если там есть проверка на тип записи.
Код размещайте внутри php-тегов <?php ... ?>

0
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
11
21:40

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

0
Вова (Otshelnik-Fm)
не в сети 17 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18642
12
21:47

... и ошибка говорит нам о... ?

0
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
13
21:53

_content(), но получается ошибка, ничего ниж

WP_DEBUG ничего не показывает, без данного кода все работает..
$post->ID срабатывает, проверял

0
Вова (Otshelnik-Fm)
не в сети 17 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18642
14
22:07

Ну это не предметный разговор. Разбирайтесь как увидеть текст ошибки

0
Валерий
не в сети 3 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
15
15:15

Протестировал данный код на тестовом сайте на реальном хостинге с дефолтной темой twentyten и без посторонних плагинов. Кнопка не выводиться. Добавляю код перед the_content() так:

<?php global $post;
$CartButton = new Rcl_Cart_Button_Form(array(
	'product_id' => $post->ID
));
return $CartButton->cart_form(); ?>
<?php the_content(); ?>	

Может в коде ошибка?

0
Андрей CS
не в сети 18 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16854
16
16:30

вместо return пропишите echo.
Вы если беретесь за кастомизацию, то хотя бы основы php пройдите, сейчас их просто нет.

1
Вы не имеете права на публикацию сообщений в этой теме