La mejor manera de aplicar do_shortcode en media.php para los subtítulos

2

Quería poder poner códigos cortos en un título de imagen. Hice esto con éxito modificando el archivo media.php con lo siguiente justo antes de regresar.

$atts['caption']= do_shortcode($atts['caption']);

Funciona muy bien, pero estoy seguro de que hay un mejor enfoque ya que preferiría no modificar media.php cada vez que actualizo WP.

    
pregunta Eddie 07.12.2014 - 17:37

1 respuesta

4

Los atributos del código abreviado de título se combinan con los valores predeterminados mediante la función shortcode_atts como tal href="https://github.com/WordPress/WordPress/blob/master/wp-includes/media.php#L836"> media.php ):

$atts = shortcode_atts( array(
  'id'  => '',
  'align'   => 'alignnone',
  'width'   => '',
  'caption' => '',
  'class' => '',
), $attr, 'caption' );

Por lo tanto, el tercer parámetro $shortcode está en uso con el valor de 'caption' .

Como puede ver en shortcode_atts código fuente, significa que el filtro

"shortcode_atts_caption"

se activará, lo que le permitirá modificar los atributos que se utilizarán.

En tu caso, tienes que hacer algo como:

add_filter("shortcode_atts_caption", function($atts) {
  if (isset($atts['caption'])) {
    $atts['caption'] = do_shortcode($atts['caption']);
  }
  return $atts;
});

Tenga en cuenta: si el título contendrá el shortcode 'caption' , esto causará un bucle sin fin.

Esto puede evitarse eliminando el filtro antes de llamar a do_shortcode on caption:

function my_caption_shortcode($atts) {
  if (isset($atts['caption'])) {
    // avoid endless loop
    remove_filter( current_filter(), __FUNCTION__);
    // apply shortcodes
    $atts['caption'] = do_shortcode($atts['caption']);
    // restore filter
    add_filter(current_filter(), __FUNCTION__);
  }
  return $atts;
}

add_filter("shortcode_atts_caption", "my_caption_shortcode");
    
respondido por el gmazzap 07.12.2014 - 17:58

Lea otras preguntas en las etiquetas