web-dev-qa-db-fra.com

Comment ajouter un nouveau gestionnaire d'intégration non pris en charge par oembed

Je cherche à intégrer des vidéos de sites Web n'offrant pas de support oembed, mais la référence proposée sur le codex wp à propos de wp_embed_register_handler() est tout simplement trop large pour un utilisateur comme moi.

J'ai essayé de télécharger l'exemple de code dans mon thème functions.php, qui, selon moi, incorporerait n'importe quelle vidéo forbes provenant uniquement de l'URL, comme les sites Web pris en charge par oembed, comme youtube, mais n'exporte que le lien dans l'article.

(note: tous les liens sont édités à cause de ma faible réputation.)

Dans mon cas, j'essaie d'ajouter un support pour un site Web appelé myvi.ru. Je voudrais coller uniquement l'URL dans un article et lui faire automatiquement afficher le code iframe intégré.

Par exemple, mettez

http:/www.myvi.ru/watch/Krishtianu-Ronaldu-na-ploschadi-Madrida_I8fWfbDia0ufHwP7W85ZBg2?ap=1

remplacement de // à /

cela dans un post, à la place d'avoir à obtenir le code d'intégration réel, qui est-ce

iframe width="640" height="390" src="/myvi.ru/player/embed/html/o7wvdeXPclZHaazh9Rum_ZuqOtTxR2_ntg5OVhDEhxabugy0qLQDKTbQ0SRijDi8N0" frameborder="0" allowfullscreen></iframe

<> retiré

Je pensais que mettre le suivant dans les thèmes function.php résoudrait le problème, mais pas de chance.

wp_embed_register_handler( 'myvi', '#http://(?:www)\.myvi\.ru/(?:video/embed/embed\.html|embedvideo/)\?show=([\d]+)&format=frame&height=([\d]+)&width=([\d]+)&video=(.+?)($|&)#i', 'wp_embed_handler_myvi' );

function wp_embed_handler_myvi( $matches, $attr, $url, $rawattr ) {

    $embed = sprintf(
            '<iframe src="http:/www.myvi.ru/embed/embed.html?show=%1$s&format=frame&height=%2$s&width=%3$s&video=%4$s&mode=render" width="%3$spx" height="%2$spx" frameborder="0" allowfullscreen></iframe>',
            esc_attr($matches[1]),
            esc_attr($matches[2]),
            esc_attr($matches[3]),
            esc_attr($matches[4])
            );

    return apply_filters( 'embed_myvi', $embed, $matches, $attr, $url, $rawattr );
}

Quelqu'un pourrait-il s'il vous plaît me diriger dans la bonne direction? J'ai essayé de chercher d'autres exemples sur Google, mais je n'en trouve aucun, et je suis coincé. J'apprécierais beaucoup les conseils ou les liens vers des informations susceptibles de vous aider. Merci!

3
musasi

Enregistrement d'un gestionnaire d'intégration personnalisé

Voici un exemple d'utilisation de la fonction wp_embed_register_handler() dans votre cas:

/**
 * Register an embed handler for myvi videos
 */
add_action( 'init', function()
{
    wp_embed_register_handler( 
        'myvi', 
        '#http://www\.myvi\.ru/watch/([a-zA-Z0-9_-]+)$#i',   // <-- Adjust this to your needs!
        'myvi_embed_handler' 
    );
} );

Ici, nous avons construit l'expression régulière d'une manière qui ne prend en charge aucun paramètre GET. Lors du test, vous devez donc supprimer la partie ?api=1 de l'URL. Sinon, vous pouvez simplement adapter l'expression régulière à vos besoins.

Le gestionnaire de rappel} personnalisé est défini comme suit:

/**
 * Handler callback for the myvi video provider
 */
function myvi_embed_handler( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        '<iframe src="http://myvi.ru/player/embed/html/%1$s" width="600" height="400" frameborder="0" allowfullscreen></iframe>',
        esc_attr( $matches[1] )
    );
    return apply_filters( 'myvi_embed_handler', $embed, $matches, $attr, $url, $rawattr );
}

Notez que nous supposons ici que toutes les informations d'intégration nécessaires sont contenues dans le lien vidéo.

Voici comment cela fonctionnera dans l'éditeur:

 testing myvi 

Vous ne devriez faire cela que pour les sites sur lesquels vous faites vraiment confiance !

3
birgire