Wie aktiviere ich jQuery / Script bei Bedarf?

Ich versuche, jQuery zu verwenden, um den Kommentarabschnitt meiner WordPress-Seiten anzuzeigen, aber ohne dass jQuery auf allen Seiten vorhanden sein muss, die Kommentare erlauben. Grundsätzlich brauche ich Folgendes:

  1. Eine generische JavaScript-Implementierung des ‘in view’ jQuery-plugins (http://remysharp.com/2009/01/26/element-in-view-event-plugin/)
  2. Eine Methode zum Aktivieren von jQuery (core), wenn das div mit den Kommentaren angezeigt wird.

Dies würde dann jQuery laden, was wiederum den Kommentare-Abschnitt der Seite laden würde, aber nur wenn dieser Abschnitt durch das Browser-Ansichtsfenster sichtbar wurde.

Das Problem scheint zu sein, dass ich wirklich nicht ‘wp_enqueue_script’ (WordPress ‘generische Methode zum Hinzufügen von Skripten) dafür verwenden kann, da es sich um eine PHP-function handelt. Gibt es eine Methode, die es mir erlaubt, eine functionalität wie oben beschrieben zu implementieren (ohne WordPress / jQuery-functionalität zu brechen)?

EDIT: Ich muss jQuery nur aktivieren, wenn der Leser entscheidet, dass er Kommentare lesen möchte (im Gegensatz zu nur eine Seite öffnen, den Titel sehen und gehen) – viel im Stil von Disqus. Disqus scheint nur aktiviert zu sein, wenn es im Ansichtsfenster sichtbar ist, und ich gehe davon aus, dass gleichzeitig das steuernde Javascript aktiviert ist.

Wie würde ich etwas in normalem Javascript machen (jQuery aktivieren), und es dann zu WordPress portieren?

Solutions Collecting From Web of "Wie aktiviere ich jQuery / Script bei Bedarf?"

1. Registrieren Sie jQuery und das Plugin in Ihrem Kopf

wp_register_script( 'jquery' ); wp_register_script( 'your_jquery_plugin', STYLESHEETPATH, 'jquery', '0.0', false ); 

2. Registrieren Sie eine Meta-Box

Es sollte ein einfaches Kontrollkästchen sein. Bitte machen Sie es so, wie es auf der Codex-Seite für add_meta_box () beschrieben ist (wiederholen Sie diese hier nicht einfach). Wenn Sie dem Rest folgen, sollte die $ id für die Meta-Box 'jquery_comments' .

Beispiel (verkürzt):
Innenfunktionen.php

  function add_jquery_comments_meta_box() { $id = 'jquery_comments'; $title = __( 'jQuery Comments, please?', 'your_textdomain_string' ); $context = 'side'; // advanced/normal also possible $priority = 'low'; // high also possible $callback_args = ''; // in case you want to extend it add_meta_box( $id, $title, 'add_jquery_comments_cb_fn', 'post', $context, $priority, $callback_args ); } add_action( 'admin_init', 'add_jquery_comments_meta_box', 1 ); // Prints the box content // Please adjust this to your needs - only slightly modified from codex example function add_jquery_comments_cb_fn() { // Use nonce for verification wp_nonce_field( basename(__FILE__), 'your_noncename' ); // The actual fields for data entry ?>   < ?php } 

3. Legen Sie das Skript auf der Basis Ihrer Metabox als Bedingung in die Warteschlange

und dann schreibe eine function wie diese in deine functions.php Datei

 function add_jquery_comments_plugin() { wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'your_jquery_plugin' ); } // and call it depending on a conditional in the comment form hook if ( get_post_meta($post->ID, 'jquery_comments', true) ) { add_action( 'comment_form', 'add_jquery_comments_plugin' ); } 

Nachdem ich verstanden habe, worum es bei deinem Q geht, habe ich noch ein A für dich:

-> google für “endlose Seiten” JavaScript-Skripte.

Ein Beispiel:
http://plugins.jquery.com/plugin-tags/neverending
http://plugins.jquery.com/project/in-viewport-event
http://plugins.jquery.com/project/infiniScroll

Nach vielem Googeln, dem Versuch, eine Lösung zu finden und gleichzeitig mit der Erdbebensituation in Japan Schritt zu halten, fand ich einen Weg:

Zwei Skripte für WordPress

Mit wp_enqueue_script habe ich einen DeferJS ( https://github.com/BorisMoore/DeferJS ) hinzugefügt, der das Laden von Skripten inEvent ermöglicht. Außerdem habe ich ein benutzerdefiniertes Skript hinzugefügt, das folgendermaßen aussieht:

 function gingah_comments_onLoad() { var element = document.getElementById("comments"); var current = document.body.clientHeight+document.body.scrollTop; var target = element.offsetTop; if (current >= target) { $.defer("jquery-1.5.1.min.js", { bare: true }).done(console.log('jquery-1.5.1.min.js loaded')); window.onscroll = null; } } window.onscroll = gingah_comments_onLoad; 

Was im Grunde eine schnelle Überprüfung jedes Mal, wenn der Betrachter die Seite scrollt, um zu sehen, ob das Zielelement (“Kommentare”) erreicht ist. Wenn DeferJS tatsächlich im Ansichtsfenster sichtbar ist, lädt es jquery-1.5.1.min.js (und löscht auch eine kurze Zeile zur Überprüfung in die Datei console.log). Wenn es sichtbar wurde, wurde der Effekt des Scrollens entfernt.

Zu diesem Zeitpunkt wird jQuery geladen und kann verwendet werden. Diese Methode erlaubt jedoch nicht die Verwendung der wp_enqueue_script -function zum Laden von jQuery (aber es sollte durchaus möglich sein, sie zu erweitern, um nicht zu versuchen, sie zu laden, wenn sie bereits vorhanden ist). Dies liegt an der offensichtlichen Trennung zwischen PHP und JS.

Ich danke Kaiser für seine Kommentare und Vorschläge zur Methode, vielen Dank für die Hilfe.