Intereting Posts

Почему do_shortcode не выполняет короткий код в атрибутах data- * html?

Это на установке Vanilla. Я сделал короткий код:

/** * Creates a shortcode for shortcode_use_here * @author Omar Tariq <XXXXXX@gmail.com> */ function callback_banana_abc( $args ){ /* Don't echo! Always return */ return 'yay!'; } add_shortcode( 'banana_abc', 'callback_banana_abc' ); 

И я создал шаблон, который выглядит так:

 <?php /* * Template Name: Test Template * Description: Hello world. */ $str = '<a href="#" title="[banana_abc]" data-abc="[banana_abc]">[banana_abc]</a>'; echo do_shortcode($str); 

Выход:

 <a href="#" title="yay!" data-abc="[banana_abc]">yay!</a> 

Это только для атрибутов data- *. Он отлично работает при использовании в атрибуте title .

do_shortcodes_in_html_tags() запускает атрибуты через wp_kses_one_attr() который проверяет их на wp_kses_allowed_html( 'post' ) который по умолчанию принимает только стандартные атрибуты без данных, поэтому вам нужно добавить свой атрибут:

 add_filter( 'wp_kses_allowed_html', function ( $allowedposttags, $context ) { if ( $context == 'post' ) { $allowedposttags['a']['data-abc'] = 1; } return $allowedposttags; }, 10, 2 ); 

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

 function callback_banana_abc( $args ){ $atts = shortcode_atts( array( 'title' => 'yay!', 'data' => 'yay!', 'linktext' => 'yay!' ), $args ); $str = '<a href="#" title="'.$atts['title'].'" data-abc="'.$atts['data'].'">'.$atts['linktext'].'</a>'; return $str; } add_shortcode( 'banana_abc', 'callback_banana_abc' ); $str = '[banana_abc]'; echo do_shortcode($str); $str = '[banana_abc title="ba" data="na" linktext="na"]'; echo do_shortcode($str);