Shortcode colocando html como img

4
$atts = shortcode_atts( array(

        'path' => 'https://s.w.org/about/images/logos/wordpress-logo-simplified-rgb.png'

    ), $atts);

O acima é uma parte do shortcode. No editor de texto Wordpress, este shortcode é produzido assim:

[theimg  path=""]

a vírgula invertida precisa ter o URL da imagem deste →

[theimg path="https://geordiebiker.files.wordpress.com/2011/10/audrey-marnay-longchamp-commando-drive-side.jpg"]

Problema:

quando estamos no modo visual do editor de texto e colocamos um URL de imagem nessas vírgulas, ele realmente puxa a imagem, não a URL. Fiz um gif para explicar isso .

Eu acredito que esta falta de sanitização, como esc_url etc, mas eu não sei a correção exata.

Atualização: se eu colocar apenas o URL no shortcode, o editor adicionará as tags <img src=""> ?

P.S. → a imagem não pode ser carregada aqui, pois estava acima de 2MB.

Atualização 11 de janeiro de 2018

$output = '<div class="someclasss">';

        $output .= '<img class="someclass1" src="'.$atts['simg'].'" alt="' .$caption. '" >';

    $output .= '<i class="fa fa-expand" aria-hidden="true"></i>';

$output .= '</div>';

return $output;

A maneira acima, a saída é renderizada no navegador.

Finalmente, no navegador, aparecerá assim:

<img src="<img src="http://www.qygjxz.com/data/out/84/6074239-free-image.jpg"/>">

Existe uma maneira de garantir que no src="'.$atts['path'].'" esta parte:

.$atts['simg'].

só pega URL e retira tudo?

    
por The WP Novice 10.01.2018 / 05:08

1 resposta

2

Este comportamento é mais provável e pode ser desativado. No entanto, pode quebrar outros recursos também. Há algumas soluções alternativas que você pode tentar.

Quebre o URL da imagem e o nome do arquivo

Você pode passar os argumentos para o seu shortcode da seguinte maneira:

[theimg 
    path="https://s.w.org/about/images/logos/" 
    filename="wordpress-logo-simplified-rgb.png"
]

Isso impedirá que o editor analise a URL, mas você pode obter os valores e colocá-los juntos em seu código PHP.

Use preg_match()

Então, o editor converte o URL em uma imagem HTML completa? Tudo bem, deixe ele fazer isso. Depois que o editor passar a imagem completa para o shortcode, podemos usar um preg_match em nosso código PHP para extrair o URL:

preg_match( '@src="([^"]+)"@' , $img, $match );

Isso analisará o $img content e retornará o src da tag <img> .

    
por Jack Johansson 10.01.2018 / 05:34