Autoembágios não funcionam com parágrafos

5

Estou escrevendo as partes abaixo do código no modo "Texto" do editor de postagens.

funciona:

http://www.youtube.com/watch?v=xxxxxxxxxxx

funciona:

<p>test
http://www.youtube.com/watch?v=xxxxxxxxxxx
test</p>

Não funciona:

<p>http://www.youtube.com/watch?v=xxxxxxxxxxx</p>

O último link não foi convertido para o vídeo do YouTube. Eu estou querendo saber se alguém notou isso também e se há alguma correção conhecida para isso?

    
por Paul 22.09.2013 / 22:01

1 resposta

6

O motivo porque está acontecendo, parece ser encontrado no arquivo wp-includes/class-wp-embed.php no método autoembed call-back:

/**
 * Passes any unlinked URLs that are on their own line to {@link WP_Embed::shortcode()} for potential embedding.
 *
 * @uses WP_Embed::autoembed_callback()
 *
 * @param string $content The content to be searched.
 * @return string Potentially modified $content.
 */
function autoembed( $content ) {
    return preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $content );
}

onde

// Attempts to embed all URLs in a post
add_filter( 'the_content', array( $this, 'autoembed' ), 8 );

Pelo que entendi, as linhas de correspondência devem conter apenas um link, que pode ser agrupado por qualquer número de caracteres em branco antes e depois do próprio link.

Portanto, esse padrão excluiria essa linha:

<p>http://www.youtube.com/watch?v=xxxxxxxxxxx</p>

Você pode adicionar seu próprio filtro the_content , que adiciona uma nova linha antes e depois dos links dentro das tags de parágrafo ao redor do link. Isso deve ser feito antes que o filtro autoembed seja executado, portanto, ele deve ter prioridade em 8 .

Exemplo de filtro:

Pode-se jogar com as expressões regulares nesta ótima ferramenta online:

enlace

onde inseri o padrão:

^<p>\s*(https?://[^\s"]+)\s*</p>$

com a substituição:

<p>\n$1\n</p>

Você pode ajustar isso às suas necessidades.

Aqui está uma ideia para um filtro personalizado:

add_filter( 'the_content', 'my_autoembed_adjustments', 7 );

/**
 * Add a new line around paragraph links
 * @param string $content
 * @return string $content
 */
function my_autoembed_adjustments( $content ){

    $pattern = '|<p>\s*(https?://[^\s"]+)\s*</p>|im';    // your own pattern
    $to      = "<p>\n$1\n</p>";                          // your own pattern
    $content = preg_replace( $pattern, $to, $content );

    return $content;

}
    
por birgire 22.09.2013 / 22:57

Tags