¿Por qué do_shortcode no está ejecutando el shortcode en los atributos data- * html?

2

Esto está en la instalación de la vainilla. He hecho un 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' );

Y he hecho una plantilla que se parece a esto: -

<?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);

La salida es: -

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

Esto es solo para atributos de datos *. Funciona bien cuando se usa en el atributo title .

    
pregunta Omar Tariq 27.07.2015 - 03:14

2 respuestas

7

do_shortcodes_in_html_tags() ejecuta atributos a través de wp_kses_one_attr() , lo que los compara con wp_kses_allowed_html( 'post' ) que, de forma predeterminada, solo acepta atributos estándar sin datos, por lo que tendría que agregar su atributo:

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

No puedo reproducir tu problema, pero la forma en que usas el shortcode para construir pequeños trozos de esa cadena me está volviendo loco. Intente esto, y quizás también solucione su problema:

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

Lea otras preguntas en las etiquetas