Wordpress do_shortcode и $atts['shortcode'] внутри

99
15 августа 2021, 14:00

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

Цель: Мне нужен textfield в Visual Composer, чтобы я мог добавлять уникальные shortcode'ы для каждой из моих кнопок оплаты.

Вот textfield который я создал:

array(
        'type'          => 'textfield',
        'heading'       => esc_html__('Shortcode', 'softing'),
        'param_name'    => 'shortcode',
        'edit_field_class' => 'vc_col-sm-4',
        ),

Вот shortcode который я вставляю: [purchase_link id="3839" text="Add To Cart" style="button" color="orange"]

Если я вывожу этот shortcode через:

$out .= '<div class="pricing-box-shortcode">'.'<div class="#pricing-box-shortcode">'.do_shortcode($atts['shortcode']).'</div>'.'</div>';

То получаю такой результат - моя главная проблема, которую я пытаюсь решить:

Заметил что если я не использую $atts['shortcode'] а просто вставляю голый shortcode в do_shortcode() - всё срабатывает нормально:

do_shortcode([purchase_link id="3839" text="Add To Cart" style="button" color="orange"])

Answer 1

Судя по результату то у вас в $atts['shortcore'] экранированные данные и так же ваш шорткод выводит данные, а не возвращает как это должно быть.

Answer 2

Мне кажется у вас здесь банально не хватает одинарных кавычек

do_shortcode('[purchase_link id="3839" text="Add To Cart" style="button" color="orange"]');

Вот мой пример шорткода с атрибутами

// Add Shortcode
function akea_banner_shortcode( $atts ) {
    // Attributes
    $atts = shortcode_atts(
        array(
            'img' => 'https://dummyimage.com/1920x200/ccc/fff.jpg',
            'alt' => '',
            'url' => '',
            'target' => '_self',
            'width' => '100%',
            'height' => 'auto',
        ),
        $atts,
        'banner'
    );
    $alt = ($atts['alt'] != '') ? ' alt="' . $atts['alt'] . '"' : ' alt=""';
    $urlStyles = ' style="display: block;"';
    $blockStyles = ' style="margin-bottom: 30px;"';
    $output = '<div class="akea-banner-shortcode"' . $blockStyles . '>';
    if ($atts['url'] != '') {
        $output .= '<a ' . $urlStyles . ' href="' . $atts['url'] . '" target="' . $atts['target'] . '">';
    }
    $output .= '<img src="' . $atts['img'] . '"' . $alt . ' width="' . $atts['width'] . '"' . ' height="' . $atts['height'] . '">';
    if ($atts['url'] != '') {
        $output .= '</a>';
    }
    $output .= '</div>';
    // Return code
    return $output;
}
add_shortcode( 'banner', 'akea_banner_shortcode' );
[banner img="/wp-content/uploads/2019/02/banner_blog.png" alt="banner" url="https://domain.ru/" target="_blank"]
READ ALSO
изменение переменной PHP

изменение переменной PHP

Как присвоить text в <input type="text" value="+1" name="n"> значению переменной $a

167
.php открывает как текст

.php открывает как текст

Помогите пожалуйста я запустил сайт и после этого браузер не читаетphp файлы а читает только

94
Проблемы с кодировкой csv

Проблемы с кодировкой csv

Есть CSV-файл, в нём нужно прочитать несколько строк с конца и переслать их на серверПри чтении русские буквы некорректно отображаются

246
Не принимает конфигурацию WebMvcConfigurer

Не принимает конфигурацию WebMvcConfigurer

На компе всё работает, на ноуте выдаёт следующую ошибку

253