it-swarm.com.de

Do_Shortcode funktioniert nicht beim Einbetten

Ich versuche, benutzerdefinierte Feldtypen zu verwenden, um Youtube-Videos organisierter einzubetten. Die Verwendung von Do_Shortcode () scheint jedoch perfekt zu funktionieren.

<?php echo do_shortcode('[embed]http://www.youtube.com/watch?v=K0M09Ws8vpc&feature=player_embedded[/embed]'); ?>

Scheint nicht zu funktionieren, funktioniert jedoch in der gleichen single.php-Datei perfekt:

<?php echo do_shortcode('[gallery link="file" size="thumbnail" icontag="div"]'); ?>

Ich habe sie nacheinander abgelegt, um sie zu testen, und um herauszufinden, warum der [eingebettete] Shortcode nicht analysiert wird (er zeigt nur nichts an).

Wenn ich den eingebetteten Shortcode direkt in den Beitrag einbinde, funktioniert er einwandfrei.

Vielen Dank,

Jordan

6
Jordash

Einfach ausgedrückt ist [embed] kein regulärer Shortcode. Meistens tut es nichts. Was passiert, wenn der Inhalt eines Beitrags den the_content-Filter durchläuft?

  1. [emded] ist derzeit registriert, um nichts zu tun (__return_false())

  2. WP_Embed->run_shortcode()-Filter wird mit niedriger 8-Priorität ausgeführt

  3. alle Shortcodes sind deaktiviert
  4. [embed] ist für WP_Embed->shortocde() registriert
  5. do_shortcode() wird für den Inhalt ausgeführt (nur beim Einbetten, da der Rest deaktiviert ist)
  6. shortcodes werden auf den ursprünglichen Zustand zurückgesetzt, [embed] ist wieder unbrauchbar.

Also würde meine schnelle Vermutung für etwas zum Ausprobieren lauten:

global $wp_embed;

echo $wp_embed->run_shortcode('[embed]whatever[/embed]');

Beachten Sie jedoch, dass auch Zwischenspeicherung erforderlich ist (die Einbettungsergebnisse werden im benutzerdefinierten Feld des Posts gespeichert, andernfalls muss jedes Mal eine HTTP-Anforderung gesendet werden), und dass dies wahrscheinlich nicht funktioniert, es sei denn, Sie tun dies in einer Schleife und in der Nähe der entsprechenden Stelle normalerweise funktioniert. Vielleicht sogar dann.

13
Rarst

Ihr Code sollte funktionieren, möglicherweise eine Idee für ein Trac-Ticket.

In der Zwischenzeit können Sie versuchen:

global $wp_embed;
$post_embed = $wp_embed->run_shortcode('[embed]http://www.youtube.com/watch?v=K0M09Ws8vpc&feature=player_embedded[/embed]');
echo $post_embed;
3
Wyck
   $video_url = get_post_meta($post_id, 'video_url',true);
    //or
    $video_url .= 'video url';
    $check_embeds=$GLOBALS['wp_embed']->run_shortcode( '[embed]'. $video_url .'[/embed]' );
    echo $check_embeds;
0
Jung Rozal