Por que o does_shortcode não está executando o shortcode nos atributos data- * html?

2

Isso está na instalação do Vanilla. Eu fiz um shortcode: -

/**
 * 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' );

E criei um modelo que se parece com isto: -

<?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 saída é: -

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

Isso é somente para atributos data- *. Funciona bem quando usado no atributo title .

    
por Omar Tariq 27.07.2015 / 03:14

2 respostas

7

do_shortcodes_in_html_tags() executa atributos por meio de wp_kses_one_attr() , que os verifica em relação a wp_kses_allowed_html( 'post' ) , que por padrão só aceita atributos padrão de não dados, por isso você precisa adicionar seu atributo:

add_filter( 'wp_kses_allowed_html', function ( $allowedposttags, $context ) {
    if ( $context == 'post' ) {
        $allowedposttags['a']['data-abc'] = 1;
    }
    return $allowedposttags;
}, 10, 2 );
    
por bonger 27.07.2015 / 05:34
0

Não consigo reproduzir o seu problema, mas a maneira como você está usando o shortcode para construir pequenos pedaços dessa string está me deixando louco. Tente isso e talvez funcione em torno do seu problema também:

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);
    
por s_ha_dum 27.07.2015 / 04:22

Tags