如果文件存在,则将脚本排入队列

时间:2015-02-28 22:00:34

标签: php jquery wordpress

我在wordpress上使用wordpress。

我的网站已安装到mydomain.xx/install,但是从mydomain.xx开始运行。

我的functions.php 有效,如下所示:

<?php

/* Script in head */
function carica_scripts() {

  /* Common scripts */
  // insert scripts here, if some

  /* Page-based script */
  $pageId = get_the_ID();
  $pageType = get_post_type();
  $myBaseURL = get_stylesheet_directory_uri() . '/js/';

  /* Page-type scripts */ 
  if($pageType == "product") {
    wp_enqueue_script('CondAll', $myBaseURL . 'CondAll.js', array('jquery'));
    wp_enqueue_script('CondShipping', $myBaseURL . 'CondShipping.js', array('jquery'));
  }

  /* Page-id scripts */
  if($pageId == "1") {
    wp_enqueue_script('Cond1', $myBaseURL . 'Cond1.js', array('jquery'));
  }

  if($pageId == "294") {
    wp_enqueue_script('Cond294', $myBaseURL . 'Cond294.js', array('jquery'));
  }

  if($pageId == "318") {
    wp_enqueue_script('Cond318', $myBaseURL . 'Cond318.js', array('jquery'));
  }

  if($pageId == "232") {
    wp_enqueue_script('Cond232', $myBaseURL . 'Cond232.js', array('jquery'));
  }
  /* END of page-based script */
}

add_action( 'wp_enqueue_scripts', 'carica_scripts' );

?>

我想要实现的是避免$pageId上的所有ifs,并在CodXXX.js上自动入队jQuery脚本page id XXX如果相关文件存在于子目录/js/中我孩子的主题。

2 个答案:

答案 0 :(得分:2)

file_exists()期望文件的绝对路径而不是URL。

使用get_stylesheet_directory()获取所需的路径。此外,get_the_ID()不应在循环之外使用。

示例:

/* 
 * Enqueue CondXXX.js on page XXX if file CondXXX.js exists 
 */
function carica_scripts() {
    global $post;

    // Check we're on a page.
    if ( ! is_page() ) {
        return false;
    } 

    // Build the filename to check.
    $handle  = 'Cond' . $post->ID;
    $relpath =  '/js/' . $handle . '.js';

    // Get path + url to file.
    $file_path = get_stylesheet_directory() . $relpath;
    $file_url  = get_stylesheet_directory_uri() . $relpath;

    if ( file_exists( $file_path ) ) {
        wp_enqueue_script( $handle, $file_url, array( 'jquery' ) );
    }  
}
add_action( 'wp_enqueue_scripts', 'carica_scripts' ); 

答案 1 :(得分:0)

Nathan Dawson给出的答案在我的案例中不起作用,我不得不做一些变通办法。我最终得到了以下代码:

/* Load scripts in head */
function carica_scripts() {

  /* Common scripts */

  /* END of common scripts */

  /* Page-based script */
  $pageId = get_the_ID();
  $pageType = get_post_type();
  $handle  = 'Cond' . $pageId;
  $file = $handle .'.js';
  $relPath = '/js/';
  $styleSheet_path = get_stylesheet_directory();
  $domain_base = 'mydomain.it/public_html/';
  $start_pos = strpos ( $styleSheet_path, $domain_base) + strlen ($domain_base); 
  $basePath = substr ( $styleSheet_path, $start_pos); // I need everything after 'mydomain.it/public_html/'
  $file_path = $basePath. $relPath . $file;
  $enqueue_path = get_stylesheet_directory_uri() . $relPath;
  $enqueue_file = $enqueue_path . $file;

  /* if page-type is ... (product, in this case) */  
  if($pageType == "product") {
    wp_enqueue_script('CondAll', $enqueue_path . 'CondAll.js', array('jquery'));
    wp_enqueue_script('CondShipping', $enqueue_path . 'CondShipping.js', array('jquery'));
  }
  /* If page id is... (1, in this case - because page 1 is not product but I want CondAll here too) */
  if($pageId == "1") {
    wp_enqueue_script('CondAll', $enqueue_path . 'CondAll.js', array('jquery'));
  }
  /* auto load script CondXXX.js from subdir js/ if file exists */ 
  if ( file_exists( $file_path ) ) {
    wp_enqueue_script( $handle, $enqueue_file, array( 'jquery' ) );
  }       
  /* END of page-based script */
}

add_action( 'wp_enqueue_scripts', 'carica_scripts' );

现在脚本加载。