it-swarm.com.de

Wie man Javascript nur hinzufügt, wenn eine Funktion existiert?

Ich habe einige Funktionen. Für beide benötigen sie Javascript-Code. Ich muss Javascript-Code nur in der Kopfzeile hinzufügen, wenn die Funktion aktiv ist. Zu diesem Zeitpunkt habe ich alle meine Javascript-Code in der Kopfzeile für alle meine Funktionen und Newermind, welche von ihnen aktiv ist. Ich habe versucht, diesen Code zu machen, aber nichts hat sich geändert: Alles, was ich in scripts.php habe

function my_scripts() {
  if (!is_admin()) {
    wp_enqueue_script('jquery');
    wp_enqueue_script( 'custom', 
      get_bloginfo('template_directory').'/js/custom.js', 
      array( 'jquery' ), 
      '', 
      true );
    if (is_front_page()) {
      if (function_exists('function_one'))
        wp_enqueue_script( 'jquery1',
          get_bloginfo('template_directory').'/js/jquery.plugin.js', 
          array( 'jquery' ));
      else if (function_exists('function_two'))
        wp_enqueue_script('jquery2',          
          get_bloginfo('template_directory').'/js/jquery.plugin2.js', 
          array( 'jquery' ));
      else if (function_exists('function_three'))
        wp_enqueue_script( 'jquery3',
          get_bloginfo('template_directory').'/js/jquery.plugin3.js', 
          array( 'jquery' )); 
    }
  }
}
add_action('wp_print_scripts', 'my_scripts');

mycode.php Dieser Code enthält alle meine drei Funktionen. Sieht aus wie:

function function_one() { ?>
  ...code.. 
<?php }

function function_two() { ?>
  ...code.. 
<?php }

function function_three() { ?>
  ...code.. 
<?php }

Diese beiden Dateien sind in functions.php definiert.

Ich bin neu in PHP, bitte helfen Sie mir, wie soll ich tun müssen? Vielen Dank!


UPDATE

Die Funktion zur Auswahl des Schiebereglers sieht folgendermaßen aus

function sliders {
  $sliders = get_option('src_switcher'); // array in theme options with sliders name
  if($sliders == 'First slider') {
    function_one();
  }
  if($sliders == 'Second slider') {
    function_two();
  }
  if($sliders == 'Third slider') {
    function_three();
  }
}
1
Denis Belousov

Hallo @ Denis Belousov:

Okay, basierend auf Ihren Antworten werde ich fragen, warum es an die vorhandene Funktion gebunden ist, warum nicht einfach den Rückgabewert von get_option('src_switcher') so testen?

function my_scripts() {
  if (!is_admin()) {
    wp_enqueue_script('jquery');
    wp_enqueue_script( 'custom', 
      get_bloginfo('template_directory').'/js/custom.js', 
        array( 'jquery' ), 
        '', 
        true );
    if (is_front_page()) {
      $sliders = get_option('src_switcher'); 
      if ($sliders == 'First slider') 
        wp_enqueue_script( 'jquery1',
          get_bloginfo('template_directory').'/js/jquery.plugin.js', 
          array( 'jquery' ));
      else if ($sliders == 'Second slider') 
        wp_enqueue_script('jquery2',          
          get_bloginfo('template_directory').'/js/jquery.plugin2.js', 
          array( 'jquery' ));
      else if ($sliders == 'Third slider') 
        wp_enqueue_script( 'jquery3',
          get_bloginfo('template_directory').'/js/jquery.plugin3.js', 
          array( 'jquery' )); 
    }
  }
}
add_action('wp_print_scripts', 'my_scripts');

Wenn Sie alternativ den Funktionstest verwenden müssen, möchten Sie, dass der Code, der Ihre Funktionen definiert, wie folgt aussieht:

$sliders = get_option('src_switcher'); 
if ($sliders == 'First slider') 
  function function_one() {
    ...code.. 
  }
else if($sliders == 'Second slider') 
  function function_two() {
    ...code.. 
  }
else if($sliders == 'Third slider') 
  function function_three() {
    ...code.. 
  }
2
MikeSchinkel

Grundsätzlich schlägt Ihr Ansatz fehl, weil function_exist() einfach die Funktionsdefinition überprüft. Es ist egal, ob die Funktion jemals ausgeführt wird oder so.

In Ihrem Fall ist es meines Erachtens sinnvoll, die Enqueue genauso zu handhaben wie die Auswahl Ihres Schiebereglers.

$sliders = get_option('src_switcher');

if($sliders == 'First slider')
    $plugin = 'jquery.plugin.js';

elseif($sliders == 'Second slider')
    $plugin = 'jquery.plugin2.js';

elseif($sliders == 'Third slider')
    $plugin = 'jquery.plugin3.js';

wp_enqueue_script( 'jquery-slider', get_bloginfo('template_directory').'/js/'.$plugin , array( 'jquery' ));
1
Rarst

Überprüfen Sie Ihre Logik ...

Sie sagen, dass Sie 3 Funktionen in einer Datei definiert haben.

if(condition_1_true)      // in your case it is
  execute_function_1

elseif(condition_2_true)  // this one is true also, but never gets executed because first one was true too
  execute_function_2

elseif(condition_3_true)  // same here
  execute_function_3

Also "else" entfernen, "if" verwenden. Und wozu dient function_exists (), wenn Sie wissen, dass Ihre App drei Funktionen enthält?

0
onetrickpony