如何仅在函数存在的情况下添加Java脚本?

时间:2010-12-23 作者:Denis Belousov

我有一些功能。他们都需要javascript代码。我只需要在函数处于活动状态时在标题中添加javascript代码。此时,我的所有函数和newermind的所有javascript代码都位于标题中,其中一个处于活动状态。我试图编写此代码,但什么都没有改变:我所拥有的一切scripts.php

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这段代码包括我的三个函数。看起来像:

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

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

function function_three() { ?>
  ...code.. 
<?php }
这两个文件在中定义functions.php.

我是php新手,请帮助我该怎么做?非常感谢。


UPDATE

用于选择滑块的函数如下所示

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();
  }
}

3 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

你好@Denis Belousov:

好的,根据您的回答,我想问一下,为什么要将其与现有函数联系起来,为什么不测试get_option(\'src_switcher\') 像这样?

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\');
或者,如果必须使用函数测试,则需要定义函数的代码如下所示:

$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.. 
  }

SO网友:Rarst

基本上你的方法失败了,因为function_exist() 只需检查函数定义。它不在乎函数是否运行过或类似的事情。

在您的情况下,我认为以与滑块选择相同的方式处理排队是有意义的,如下所示:

$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\' ));

SO网友:onetrickpony

检查您的逻辑。。。

您说在一个文件中定义了3个函数。

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
因此,请删除“else”,使用“if”。如果你知道你的应用程序中有3个函数,那么使用function\\u exists()有什么意义?

结束

相关推荐

如何将外部jQuery/Javascript文件与WordPress链接

因此,我使用Starkers作为我下一个WP主题的基础,我遇到了一个小问题,我在header.php 但是当我使用Firebug检查我的网站时,我注意到jquery被下载了两次,我做了一些挖掘,并注意到我不仅包括了文件,还包括了wp_head() 作用在尝试修复该问题时,我注意到头文件中有一条注释,该注释源于“210”主题:/* Always have wp_head() just before the closing </head> * tag of your theme, or