web-dev-qa-db-fra.com

Wordpress refuse d'afficher l'URL oembed

J'ai besoin de WP pour afficher une représentation intégrée d'une URL telle que http://domain.com/1121 en utilisant oembed.

J'ai installé http://domain.com/1121 avec un lien de découverte:

<link href="http://www.domain.com/generator/oembed/?url=http%3A//domain.com/1121" rel="alternate" type="text/xml+oembed" />

Je suis conscient que WP ne découvre plus automatiquement les URL incorporables. J'ai donc installé le plugin enable-oembed-discovery à réactiver. cette fonctionnalité.

J'ai surveillé mes journaux Apache et confirmé que WP clique sur le lien pour le découvrir. Je suppose donc que le plug-in enable-oembed-discovery fonctionne, mais que l'URL n'est jamais convertie.

J'ai même écrit un plugin pour ajouter mon URL personnalisée à la liste blanche (cela ne devrait vraiment pas être nécessaire car le plugin enable-oembed-discovery devrait permettre la découverte automatique, mais bon sang):

add_action( 'init', 'my_oembed_provider' );

function my_oembed_provider() {
    wp_oembed_add_provider( 'http://domain.com/*', 'http://www.domain.com/generator/oembed/', false);
}

et toujours rien.

Le noeud final de l'API (http://www.domain.com/generator/oembed/) est codé en dur pour générer le code XML suivant:

        <?xml version="1.0" encoding="UTF-8"?>
        <OEmbed>
            <type>rich</type>
            <width>400</width>
            <height>342</height>
            <html><![CDATA[&lt;b&gt;HELLO WORLD FROM OEMBED &lt;/b&gt;]]></html>
        </OEmbed>

Le point de terminaison de l'API envoie l'en-tête de type de contenu approprié (header("Content-type: text/xml");) comme l'exige la spécification oembed .

L'utilisateur qui ajoute l'article a des privilèges d'administrateur et est donc autorisé unfiltered_html

Je suis à court d'idées et à bout de forces. Qu'est-ce que je rate?

3
Jahufar

Votre élément racine XML était "OEmbed" et non "oembed", comme indiqué dans la spécification. Les noms d'éléments XML sont sensibles à la casse, conformément à la spécification XML.

3
Dougal Campbell

Deux choses:

  1. L'implémentation oEmbed de WordPress est préférable et fonctionne mieux avec JSON.

  2. Pour utiliser XML, WordPress a besoin de la bibliothèque simplexml dans PHP pour être disponible. Si ce n'est pas disponible, vous obtiendrez probablement les résultats que vous voyez. Obtenir le XML, mais ne peut pas l'analyser sans simplexml, donc ... rien ne se passe.

Meilleure façon de résoudre le problème: Arrêtez d'essayer d'utiliser XML. Utilisez JSON à la place.

Le type de lien serait application/json + oembed.

Le noeud final renverrait des données JSON (à l'aide d'un type de contenu application/json):

{
"type":"rich",
"width":"400",
"height":"342",
"html":"&lt;b&gt;HELLO WORLD FROM OEMBED &lt;/b&gt;"
}

Les choses ont tendance à mieux fonctionner de cette façon. JSON est le format préféré pour oEmbed avec tous les fournisseurs.

4
Otto