Question

J'utilise markItUp pour un textarea dans un widget WP (qui est, sur la page widgets.php, lors de la création et l'édition d'un widget).

Le textarea est markItUp'ed quand j'ouvre le widget, mais après avoir cliqué sur Enregistrer la fonctionnalité est perdue et je suis de retour à un textarea régulier.

Je comparais le code source pour l'avant-enregistrer et après enregistrer les versions de la page et il n'y a pas de différence -obviously, que la page n'est pas rechargées. Est-ce que jQuery besoin d'être invoqué pour chaque appel ajax?

J'ai essayé d'ajouter

jQuery(".markitup").markItUp(mySettings);

à l'intérieur de la fonction de gestion des formulaires du widget, mais cela n'a pas aidé. J'ai essayé d'apporter des modifications contraignantes cet événement à qui ne trop bouton d'enregistrement, mais ne semble pas faire une différence (il y a une bonne chance que je l'ai eu tout faux).

Était-ce utile?

La solution

jQuery

Alors, la première chose que vous devez faire est de crochet dans l'appel AJAX afin que vous êtes averti lorsque les widgets ont été enregistrés. Pour ce faire, nous allons utiliser la fonction ajaxSuccess jQuery. Mettez cela dans son propre fichier js:

// Use a self executing function so we can safely use
// $ inside and know it = jQuery
(function($){

    // Tie into all jQuery AJAX requests
    $(document).ajaxSuccess(function(e, x, o){

        // Make sure our widget is the one being saved
        // id_base will equal whatever is set in the PHP for the widget
        // In this example, we target the text widget 
        if(o.data && o.data.indexOf('id_base=text') > -1){

           // Now, lets quickly find all the right elements
           // and filter out the ones already set up, and finally
           // apply the `markItUp` call, but we will delay just to give
           // WP a chance to update the widget
           window.setTimeout( function(){
               $("textareas.markItUp:not(.markItUpEditor)").markItUp(mySettings);
           }, 200 );
        }
    });

})(jQuery);

Le PHP / WordPress

Enfin, dites-WP d'inclure votre nouveau fichier js uniquement sur la page des widgets. Vous aurez besoin d'intégrer ce soit dans functions.php ou si vous construisez un widget, dans le fichier PHP widgets:

function register_markitup(){
    wp_enqueue_script( 'markitup-widgets', WP_PLUGIN_URL . '/your-plugin/js/markitup-ajax.js' );
}

add_action( "admin_print_scripts-widgets.php", 'register_markitup' );

Modifier J'ai eu un crochet add_action incorrect quand je posté. Il avait besoin de l'.php que je viens d'ajouter. Le code est correct maintenant.

Autres conseils

La solution de Doug fonctionnait très bien. Je ne devais changer la fonction window.setTimeout comme suit:

 window.setTimeout( function(){
   $("textarea.markItUp").each(function () {
      if (!($(this).hasClass('markItUpEditor'))) {
          $(this).markItUp(mySettings);
      }
    });                                    
 }, 200 );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top