sergeibasharov
  • 0
Новичок

Атрибуты коротких кодов по умолчанию

  • 0

Я использую эту конструкцию для реализации собственного шорткода:

function column_with_icon($atts, $content = null) {
    extract(shortcode_atts(array(
        'icon' => 'onebit_03'
    ), $atts));

    return '<div class="column3">
    <img class="features-icon" alt="icon" src="' . get_bloginfo("template_url") . '/images/icons/' . $icon . '.png"/>
                            <div class="feature-content">' . $content . $icon . '</div>';
}

add_shortcode('column-icon', 'column_with_icon');

Когда я пытаюсь добавить такой контент:

[column-icon icon="onebit_13"]
<h3>What is Lorem ipsum?</h3>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
<a href="#" class="main-theme-link">Learn more</a></div>
[/column-icon]

Значение атрибута «icon» по умолчанию не переопределяется, и я получаю его равным «onebit_03», а не «onebit_13». Что мне с этим делать?

ОБНОВЛЕНИЕ Вот код, который я использую для получения и представления данных:

function skible_load_special_offer_section() {
    $content = get_option("prc_speciall_offer_text", true);
    if (get_option("prc_show_special_offer_section")) {
        echo stripslashes(do_shortcode('<!--Start Special offer (in border) content-->
                    <div class="border-top"></div>
                    <div class="border-middle">
                        <div class="special-offer-area">
                            <div class="special-offer-image-left">
                                <img alt="image" src="' . get_bloginfo("template_url") . ' /colors/magic_night/special-offer-image.png"/>
                            </div>
                            <div class="special-offer-content-right">' . $content . '</div>
            <div class = "clear"></div>
            </div>
            </div>
            <div class = "border-bottom"></div>
            <!--End Special offer (in border) content-->'));
    }
}
Share
  1. Я скопировал ваш код для теста, и атрибут по умолчанию правильно переопределен. Не уверен, в чем проблема, но она не отображается только этим кодом.

    • 0
  2. Я понятия не имею, что пошло не так в вашей настройке. Очевидно, что шорткод правильно зарегистрирован, но в каком-то конкретном случае что-то мешает его корректному разбору.

    Это тестовый код, который примерно повторяет, как шорткод анализируется для выполнения:

    $content = get_option("prc_speciall_offer_text", true);
    $pattern = '/'.get_shortcode_regex().'/s';
    preg_replace_callback( $pattern, 'var_dump', $content );
    

    Вывод массива должен соответствовать следующему, согласно get_shortcode_regex() спецификации:

    1/6 — дополнительный [ или ] для экранирования шорткодов двойными [[]]

    2 — Имя шорткода

    3 — Список аргументов шорткода

    4 — Самозакрывающийся /

    5 — Содержимое шорткода, когда он оборачивает некоторый контент.

    Это то, что он сбрасывает для меня:

    array
      0 => string '[column-icon icon="onebit_13"]
    <h3>What is Lorem ipsum?</h3>
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
    <a href="#" class="main-theme-link">Learn more</a></div>
    [/column-icon]' (length=389)
      1 => string '' (length=0)
      2 => string 'column-icon' (length=11)
      3 => string ' icon="onebit_13"' (length=17)
      4 => string '' (length=0)
      5 => string '
    <h3>What is Lorem ipsum?</h3>
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
    <a href="#" class="main-theme-link">Learn more</a></div>
    ' (length=345)
      6 => string '' (length=0)
    
    • 0

Оставить ответ

You must login to add an answer.