Wordpress, embed video Problem

  • Ich hab ne Wordpress-Site, auf der ich diesen Plugin für Fragebögen nutze.


    Wenn ich auf ner normalen Wordpress Seite oder Beitrag ein Video einfüge, wird das über folgenden Wordpress-Shortcode gemacht: [VIDEO mp4="link-blabla.mp4"][/VIDEO]
    das funktioniert soweit hervorragend.


    Mach ich das selbe in einem Fragebogen (also in einem Textfeld innerhalb des Quiz-Plugin), sehe ich das Video nur im tinyMCE-Editor, aber NICHT auf der Website selbst! Dort erscheint nur (VIDEO mp4="link-blabla.mp4")(/VIDEO) mit runden Klammern!


    Hat jemand ne Idee, was für eine security da greift? Wahrscheinlich muss ich nur irgendwo in Wordpress einstellen "Plugins dürfen shortcode nutzen" oder so ... leider find ich das aber nicht :-(


    Ach ja: wenn ich im text-modus des editors (also nicht im visual mode) den HTML5-video tag ordnungsgemäß einfüge (also mit spitzen klammern, etc.) funktioniert das Video auch! Es liegt also definitiv irgendwo am shortcode!

  • Sicher, dass dann aus dem Shortcode runde Klammern im Frontend werden? Oder ist das nicht nur dem genutzten Font geschuldet, dass es vllt. so aussieht, und stattdessen einfach nur der ungeparste Shortcode mit eckigen Klammern ausgegeben wird? Das würde zumindest darauf hinweisen, dass der Autor nicht möchte oder vorgesehen hat, dass im Frontend Shortcodes in diesem Feld geparsed werden.


    Um welches Feld handelt es sich denn, wo du den Shortcode eingefügt hast? Dann schau ich mal im Source des Plugins, was der Autor bei der Ausgabe macht. :)

  • Blitzgescheit, der Cyber! Natürlich schauts nur in der Font so aus, als wärens runde Klammern! Sind aber tatsächlich eckige Klammern!


    Ich hatte jetzt nicht mehr viel Zeit, aber kanns sein, dass mir hier die wordpress-funktion add_filter mit do_shortcode weiterhilft?


    Auch komisch: in den Quizzes kann man an mehreren Stellen Texte einfügen. Füge ich ein Video in eine Quizfrage ein, läufts einwandfrei. Füge ich es aber ins freie Textfeld ein, dass über dem Quiz angezeigt wird, hab ich den Fehler :-?

  • Ja, also es gibt keinen allgemeinen Switch, über den man einstellen kann, dass Shortcodes überall geparsed werden. Vielmehr kann und muss das der Plugin-Autor selbst entscheiden und offenbar hat er das für den Intro-Text nicht vorgesehen.


    Das direkt im Plugincode nachzurüsten ist kein Ding, allerdings wäre dann die Änderung bei jedem Plugin Update futsch.


    Anstreben sollten wir eine Lösung über Filter oder Actions, wie in deinem Link, wobei der aber nur auf allgemeine Felder eingeht und nicht auf pluginspezifische.

  • Ok, versuch folgenden Snippet in der functions.php deines Themes

    PHP
    if( function_exists('add_filter') ) {
    add_filter( 'mlw_qmn_template_variable_quiz_page', 'shortcode_unautop');
    add_filter( 'mlw_qmn_template_variable_quiz_page', 'do_shortcode' );
    }

    Damit kannst das Plugin munter weiter updaten, ohne dass die Anpassungen verloren gehen, wenn's funktioniert.

  • Ah, super! Das sieht eh so ähnlich aus, wie das was ich gestern schon kurz probiert hab.
    Mit dem Unterschied, dass dein Codesegement sofort funktioniert hat :-D
    Vielen Danke mal wieder, dass Du immer meine web-probleme löst :-)

  • Tjaa .. gut dass ich den Thread noch nicht auf solved gesetzt hab :-)


    Hat zwar nix mehr mit dem Videoproblem zu tun, aber dennoch mit dem Plugin.
    Beim Quiz-Plugin hat man die Möglichkeit "required"-Felder zu setzen, die dann per Javascript abgefragt werden und das Absenden des Formulars verhindern.


    Ich hab jetzt entdeckt, dass ein zweiter Plugin (den ich massiv überarbeitet hab) diese Required-Javascript-Sache stört! Beim clicken auf den Submit-Button wird das Javascript anscheinend ignoriert. Nur: wie finde ich raus, wo der Hund begraben liegt? und obs überhaupt am JS liegt (im JS vom zweiten Plugin hab ich nämlich nix geändert .. nur in der Plugin-php-Datei).
    define('WP_DEBUG', true); hab ich schon probiert .. da kommt kein Fehler ..

  • Die Dev Tools (F12) helfen da immer ganz gut. Da kannst auf bestimmte Element Breakpoints setzen, die greifen, wenn an einem Element Attribute oder sonstwas geändert wird.


    Ich würde aber erstmal in der Konsole der Dev Tools schauen, ob da ein JS-Fehler oder dergleichen erscheint.

  • Cool! Danke für den Tipp!


    Hmm .. sobald ich den anderen Plugin aktiviere, treten 3 JS-Fehler auf .. die aber allesamt auf irgendwelche Wordpress- bzw. Quiz-JS Dateien verweisen! (/wp-content/themes/twentythirteen/js/functions.js; /wp-content/plugins/quiz-master-next/js/qmn_quiz.js; /wp-includes/js/admin-bar.min.js)


    ist der andere Plugin inaktiv, gibts auch keine Fehler ... :-(


    Ich werd mit Firebug mal alle Zeilen raushauen, die mit dem Plugin zu tun haben könnten, und die Fehler im Auge behalten. Ist echt ein hilfreiches Tool!

  • Tadaa .. cluprit found!


    Es gibt im zweiten plugin folgende Zeilen:

    Code
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js' );
    wp_enqueue_script( 'jquery' );

    mit der ersten wird das Wordpress-Hauseigene jQuery deaktiviert, und mit der zweiten Zeile wird dann eins von den GoogleAPI's aktiviert. Leider is genau da das Problem :-( Kommentier ich nämlich die Zeile wp_deregister_script( 'jquery' ); aus, geht alles ..
    Leider weiß ich nicht, ob der Plugin jQuery 1.6.1 braucht .. Wordpress hat anscheinend nur 1.4.1 dabei ... (ich kenn mich mit den ganzen AJAX und jQuery APIs sowieso nicht aus :-( )

  • also .. wenn ich // wp_deregister_script( 'jquery' ); mache, kommen zwei Zeilen:


    Code
    JQMIGRATE: Migrate is installed, version 1.4.1
    TypeError: $ is not a function init.js?ver=1.0 (Zeile 1, Spalte 1)

    Dann funktionieren die "required"-Felder im Formular auch.

  • Lass ich die wp_deregister_script Zeile drin, kommt folgendes:


    Code
    TypeError: _window.on is not a function
    TypeError: jQuery(...).on is not a function
    TypeError: this.on is not a function

    die 2. Zeile verweist auf diese Codezeile im JS vom Quiz-Plugin: jQuery( '.qmn_quiz_container input' ).on( 'keypress', function ( e ) {

  • Hmmm, $ is not a function sagt, dass in der init.js irgendwo $() statt jQuery() genutzt wird. Dann dürfte zumindest Teile in der init.js gar nicht funktionieren bzw. ausgeführt werden.


    Gibts einen Link? :)


    edit: Ok, das Problem ist das Quiz Plugin, das die neue jQuery Version von WP killt, eine alte jQuery Version einbindet und so einige jQuery Funktionen der neueren Version wegnimmt, womit andere Scripte nicht klarkommen, die die neue jQuery Version von WP erwarten.

  • Ok .. Deine Info über das neuere jQuery in Wordpress war hilfreich! Folgendes scheint zu funktionieren:
    ich lass wp_deregister_script drinnen, aber ich ändere die folgende wp_register_script-Zeile auf jQuery 1.12.4


    Code
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js' );
    wp_enqueue_script( 'jquery' );

    Damit gibts keine Fehlermeldungen mehr, und die "required"-Felder gehen auch.


    Muss ich nur hoffen, dass in der alte Problem-Plugin (für den es keine Updates mehr gibt) keine deprecated functions aus jQuery 1.6.1 nutzt :-/

  • Ok, änder mal bitte die Zeile


    Code
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js' );

    in

    JavaScript
    wp_register_script( 'jquery', includes_url('js/jquery/jquery.js') );

    Damit nimmst das jQuery von WP, was ja auch 1.12.4 ist. Sicherer als es von nem CDN zu holen.