Неправильно отображается шорткод Wordpress

Я пытаюсь повторить что-то подобное, используя шорткод wordpress:

<a href="some/link.html><div class="rhinoButton">Submit</div></a>

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

function rhino_button_shortcode( $atts) {
    $atts = shortcode_atts(
        array(
            'label' => 'Submit',
            'url' => '',
        ), $atts, 'rhinoButton' );

    return '<a href="'.$atts['url'].'"><div class="rhinoButton">'.$atts['label'].'</div></a>';
}

add_shortcode('rhinoButton', 'rhino_button_shortcode');

Но вместо этого выводит:

<div class="rhinoButton"><a href="some/link.html>Submit</a></div>

Он вкладывает <a> внутрь </div> (то есть задом наперёд).

Я слышал, что это может произойти, если вы повторяете, а не возвращаетесь, но это не так. Я также пробовал буферизацию вывода с помощью ob_start и ob_get_clean, но безуспешно.

Что я делаю неправильно?


person Eckstein    schedule 10.05.2018    source источник
comment
вы пробовали с span?   -  person Vel    schedule 10.05.2018
comment
Почему это сработало??   -  person Eckstein    schedule 10.05.2018
comment
Вы используете этот шорткод в редакторе администратора WordPress?   -  person Vel    schedule 10.05.2018
comment
Ах да, так что, вероятно, это связано с фильтрами контента tinyMCE и/или WP?   -  person Eckstein    schedule 10.05.2018
comment
да. проблема с фильтрами содержимого inyMCE и/или WP   -  person Vel    schedule 10.05.2018
comment
Ваша функция работает в соответствии с вашим выводом.   -  person PPL    schedule 10.05.2018
comment
Фильтры контента WP обычно работают с приоритетом по умолчанию 10, шорткоды обрабатываются функцией do_shortcode(), которая работает с приоритетом 11, поэтому я не понимаю, как фильтры контента WP могут вызвать эту проблему, если только какая-то тема или плагин не установил фильтр 'the_content' с приоритет выше 11.   -  person    schedule 10.05.2018
comment
@Eckstein Я нахожу эту проблему очень интересной, и я готов потратить много времени и усилий, чтобы понять ее. Однако мне нужно, чтобы вы проводили эксперименты, поэтому вам также нужно будет потратить время и усилия. Дайте мне знать, если вы готовы. Я действительно думаю, что ваш код должен работать. Можете ли вы использовать отладчик PHP? Или, по крайней мере, знаете, как использовать error_log()?   -  person    schedule 10.05.2018
comment
Я протестировал фильтры: wptexturize, convert_smilies, wpautop, shortcode_unautop, prepend_attachment и wp_make_content_images_responsive по отдельности, и они не перемещают div за пределы a. В любом случае, за исключением convert_smilies, они не должны иметь значения, поскольку они работают с приоритетом 10 (convert_smilies работает с 20). Здесь действительно происходит что-то странное. Могу я спросить, какую тему и плагины вы используете?   -  person    schedule 10.05.2018


Ответы (1)


Я добавил ваш код в файл function.php моей темы и протестировал его с помощью этого шорткода.

[rhinoButton url="https://www.google.com"]

Это породило следующее:

<a href="https://www.google.com"><div class="rhinoButton">Submit</div></a>

Я захватил это из исходного кода страницы в браузере.

Итак, ваш код работает, как и ожидалось, на моей установке WordPress 4.9.5 с темой Twenty Sixteen. Я думаю, что какая-то тема или плагин, который вы установили, добавляет фильтр «the_content» с приоритетом> 11.

Если вы готовы провести для меня несколько экспериментов, я могу помочь вам отследить это.

person Community    schedule 10.05.2018
comment
Спасибо за вашу готовность помочь! Поскольку решение ‹span› сработало, мне нужно продвигать проект, чтобы запустить его, но я могу вернуться сюда в будущем, чтобы разгадать тайну! На самом деле я разрабатываю пользовательскую тему и установил несколько плагинов, которые подключаются к отображению контента (для переводов и пары других вещей), поэтому может быть много причин. Хотя еще раз спасибо! - person Eckstein; 11.05.2018