it-swarm.com.de

Laden von Javascript nur, wenn bestimmte Inhalte in einem Beitrag vorhanden sind?

Ich versuche, Javascript für mein "PrettyPhoto" -Plugin nur für Seiten hinzuzufügen, deren Inhalt rel='prettyPhoto' enthält. Das sieht für mich sehr einfach aus, aber alle Lösungen, die ich im Internet gefunden habe, funktionieren für mich nicht. Ein Beispiel ist:

<?php
function load_my_js() {
  if(is_admin() ) return; // never mind if this is an admin page
  global $post;
  if (strpos($post->post_content,'rel="prettyPhoto') == false) return
  wp_register_script('js_test',plugins_url().'/demo/test.js',array('jquery'));
  wp_enqueue_script('js_test');
}
add_action('wp','load_my_js');
?>

Ein anderer von Yoast:

function yst_conditional_thickbox() {
  global $post;
  if (is_singular() &&
    strpos($post->post_content,'class="thickbox"') !== false) {
      wp_enqueue_script('thickbox');
      wp_enqueue_style('thickbox');
  }
}
add_action('wp_print_styles','yst_conditional_thickbox');

Vielleicht wissen Sie, wie das geht? Vielen Dank!


UPDATE

So sieht Ihr Code aus:

class UglyPhotoPlugin {
  static function on_load() {
    add_action('wp',array(__CLASS__,'load_my_js'));
  }
  static function load_my_js() {
    if (!is_admin()) {
      global $post;
      if (strpos($post->post_content,'rel="prettyPhoto"') !== false) {
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'prettyJs', get_bloginfo('template_directory').'/js/jquery.prettyPhoto.js', array( 'jquery' ) );
      }
    }
  }
}
UglyPhotoPlugin::on_load();

HTML-Ausgabe:

We are here!stdClass Object
(
    [ID] => 17
    [post_author] => 1
    [post_date] => 2009-12-25 17:10:18
    [post_date_gmt] => 2009-12-25 17:10:18
    [post_content] => 
    [post_title] => Portfolio
    [post_excerpt] => 
    [post_status] => publish
    [comment_status] => closed
    [ping_status] => closed
    [post_password] => 
    [post_name] => portfolio
    [to_ping] => 
    [pinged] => 
    [post_modified] => 2010-12-21 00:24:59
    [post_modified_gmt] => 2010-12-21 00:24:59
    [post_content_filtered] => 
    [post_parent] => 0
    [guid] => http://mysite.com/?page_id=17
    [menu_order] => 3
    [post_type] => page
    [post_mime_type] => 
    [comment_count] => 0
    [ancestors] => Array
        (
        )

    [filter] => raw
)

Dieser Code wird über !DOCTYPE generiert. Habe ich recht?

3
Denis Belousov

Nicht sicher, was genau Ihr Code falsch macht, aber hier ist der Code, der es richtig macht. Ich habe beschlossen, den Code in eine Klasse zu packen, die für Ihr Plugin verwendet werden soll, und für den Humor habe ich ihn "Ugly Photo Plugin" genannt. Hier ist der vollständige Code:

<?php
/*
Plugin Name: Ugly Photo Plugin
*/
class UglyPhotoPlugin {
  static function on_load() {
    add_action('wp',array(__CLASS__,'wp'));
    add_shortcode('ugly-photo',array(__CLASS__,'ugly_photo_shortcode'));
  }
  static function ugly_photo_shortcode($attributes,$content,$code) {
    return '<div rel="ugly-photo">' . $content . '</div>';
  }
  static function wp() {
    if (!is_admin()) {
      global $post;
      if (strpos($post->post_content,'[ugly-photo]') !== false) {
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'js_test', 
          plugins_url('/demo/test.js',__FILE__), 
          array('jquery') );
      }
    }
  }
}
UglyPhotoPlugin::on_load();

Beachten Sie, dass ich mich für die Verwendung eines [ugly-photo] Kurzcodes entschieden habe und diesen anstelle von 'rel="prettyPhoto"' teste, da der WYSIWYG TinyMCE-Editor von WordPress den "rel" Wert aus Ihrem <div> entfernt und dieses Problem mit dem Kurzcode löst.

So sieht der Beitrag beim Bearbeiten aus:

WordPress Post Editor with 'Ugly Photo' Shortcode
(Quelle: mikeschinkel.com )

Hier ist, was meine Javascript-Datei enthält und wo ich sie gefunden habe:

https://mikeschinkel.com/websnaps/skitched-20101225-004514.jpg
(Quelle: mikeschinkel.com )

Und hier ist das Ergebnis:

Conditional Loading of Javascript in WordPress
(Quelle: mikeschinkel.com )

P.S. Schöne Ferien!

4
MikeSchinkel