• Resuelto Fran

    (@shap11es)


    En mi wordpress con la plantilla twentyseventeen sin ninguna modificacion, si pongo en el php:

    if (shortcode_exists(‘embed’)){
    echo do_shortcode( ‘[embed]https://www.youtube.com/watch?v=ZEKcufmrb0s[/embed]‘);
    }
    else{
    echo ‘shortcode no existe’;
    }

    La ejecución entra puesto que existe el shortcode, pero no muestra nada.

    Sin embargo, si hago en el mismo php:
    global $wp_embed;
    echo $wp_embed->run_shortcode(‘[embed]https://www.youtube.com/watch?v=ZEKcufmrb0s[/embed]‘);

    De esta segunda forma si se ejecuta el shortcode sin problema.

    Las dudas que tengo es que pensaba que debia usarse la primera forma, pero no funciona.

    ¿Entonces?
    ¿Para usar la primera forma debo habilitar algo en wordpress que desconozco?
    ¿o se debe usar la segunda forma?

    Muchas gracias por anticipado. Saludos.

Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • Moderador kallookoo

    (@kallookoo)

    Hola,
    Respuesta corta: Usa la segunda opcion
    Respuesta larga: [embed] shortcode no esta habilitado globalmente y por eso no se puede llamar directamente usando el do_shortcode, aunque si te aparezca como que existe.

    Otra opcion que no he probado seria aplicar el filtro the_content para detectar el shortcode y renderizarlo.

    • Esta respuesta fue modificada hace 5 años, 11 meses por kallookoo.

    Creo que lo más adecuado es usar la función directamente: https://codex.wordpress.org/Function_Reference/wp_oembed_get

    Así no se dan rodeos, al fin y al cabo el [embed] la usa internamente.

    Iniciador del debate Fran

    (@shap11es)

    En primer lugar, gracias a ambos.

    Elias: si uso el wp_oembed_get tampoco se ejecuta el shortcode (estoy en las mismas que si pongo do_shortcode.

    Saludos.

    ¿Dónde pones el código? Estoy haciendo pruebas en un sitio vacío con Twenty Seventeen en single.php y la función wp_oembed_get me funciona pero `do_shortcode’ no.

    Por otro lado, si uso el shortcode [gallery] sí me funciona, así que debe haber alguna restricción con [embed].

    Moderador kallookoo

    (@kallookoo)

    Si @eliasgdj, como comente el WordPress no esta configurado para usar el shortcode fuera del editor usando el do_shortcode, asi que usas como tu comentas wp_oembed_get, que es mas segura que el uso de la global $wp_embed ya que es posible que la class no este definida en esa global.

    Buen apunte @elaisgdj sobre esa funcion, no pense en ella

    @shap11es como dice @eliasgdj, donde pones el codigo?

    • Esta respuesta fue modificada hace 5 años, 11 meses por kallookoo.
    • Esta respuesta fue modificada hace 5 años, 11 meses por kallookoo.
    Moderador LGrusin

    (@lgrusin)

    Pero si lo dice en los comentarios de la propia función run_shortcode

    /**
    * Process the [embed] shortcode.
    *
    * Since the [embed] shortcode needs to be run earlier than other shortcodes,
    * this function removes all existing shortcodes, registers the [embed] shortcode,
    * calls do_shortcode(), and then re-registers the old shortcodes.
    *
    * @global array $shortcode_tags
    *
    * @param string $content Content to parse
    * @return string Content with shortcode parsed
    */
    public function run_shortcode( $content ) {
      global $shortcode_tags;
      // Back up current registered shortcodes and clear them all out
      $orig_shortcode_tags = $shortcode_tags;
      remove_all_shortcodes();
    
      add_shortcode( 'embed', array( $this, 'shortcode' ) );
    
      // Do the shortcode (only the [embed] one is registered)
      $content = do_shortcode( $content, true );
    
      // Put the original shortcodes back
      $shortcode_tags = $orig_shortcode_tags;
    
      return $content;
    }

    Un saludo

    • Esta respuesta fue modificada hace 5 años, 11 meses por LGrusin.
    Iniciador del debate Fran

    (@shap11es)

    Buenas, disculpar la tardanza que he estado unos días fuera.

    La llamada a tanto a do_shortcode como la prueba con wp_oembed_get la estaba llamando desde una página «template» nueva que he creado y luego he creado una página en wordpress asignandole ese template.

    Ahora he vuelto ha probar con wp_oembed_get y ya me funciona correcto (imagino que la otra ocasión algo no puse bien).

    Muchísimas gracias a todos!!

    Moderador kallookoo

    (@kallookoo)

    Hola,
    No hace falta pedir disculpas, la cuestion es que se soluciono el problema.
    Cuando puedas marcalo como resuelto ya que ayudaría a la gestión del foro.

    Gracias

    • Esta respuesta fue modificada hace 5 años, 11 meses por kallookoo.
Viendo 8 respuestas - de la 1 a la 8 (de un total de 8)
  • El debate ‘do_shortcode no funciona run_shortcode si’ está cerrado a nuevas respuestas.