web-dev-qa-db-fra.com

Utiliser oEmbed dans les éléments de liste

Je suis conscient que WordPress a la fonctionnalité oEmbed . Mais le contenu à intégrer doit être sur sa propre ligne, comme ceci:

Lorem Ipsum

http://www.youtube.com/link/to/content

More Lorem Ipsum

Malheureusement, mon balisage ressemble à ceci, donc oEmbed ne fonctionne pas et je dois utiliser un plugin.

<ul>
    <li>http://www.youtube.com/link/to/content</li>
    <li>http://www.youtube.com/link/to/content</li>
</ul>

Y a-t-il un moyen de faire fonctionner oEmbed sans ce plugin? Une ligne ou deux dans functions.php serait mieux que ce plugin.

1
BFTrick

Utilisez simplement le shortcode [embed] autour de vos éléments.

<ul>
    <li>[embed]http://www.youtube.com/link/to/content[/embed]</li>
...
3
Otto

Il existe un peu de filtrage spécial par la classe WP_Embed qui transforme les liens autonomes en cible pour l'intégration:

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

Si nous prenons cette logique et ajustons regex pour votre cas d'utilisation:

add_filter( 'the_content', 'autoembed_list_items', 8 );

function autoembed_list_items( $content ) {

    global $wp_embed;

    return preg_replace_callback( '|<li>(https?://[^\s"]+)</li>|im', array( $wp_embed, 'autoembed_callback' ), $content );
}
2
Rarst