首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Wordpress使用本地回退加载外部脚本

Wordpress使用本地回退加载外部脚本
EN

Stack Overflow用户
提问于 2018-06-03 00:40:38
回答 3查看 547关注 0票数 0

我不知道我做错了什么!我希望函数返回一个新创建的带有true/false值的变量,我可以用它来查看是否有文件。

代码语言:javascript
复制
// Check to make sure external files are available
function checklink ( $link, $checkname ) { 
    $try_url = @fopen( $link,'r' );
    if( $try_url !== false ) { return $$checkname; } 
}

var_dump( checklink( 'https://code.jquery.com/jquery-3.3.1.min.js', 'jqueryOK' ) ); // NULL

我已经尝试将$checkname设置为true或false,在返回之前添加额外的一行来为其赋值……PHP“知道”有一个变量$jqueryOK,但说它是未定义的。

我遗漏了什么?

更新

决定分享结果,因为这在Wordpress中经常被忽视-我正在更改标题以反映任务。

代码语言:javascript
复制
// Check to make sure external files are available
function checklink ($link) { 
return( bool )@fopen( $link, 'r' );
}

function thatwomanuk_external_scripts()
{
if ($GLOBALS['pagenow'] != 'wp-login.php' && !is_admin()) {

// jquery
    $link = 'https://code.jquery.com/jquery-3.3.1.min.js';
    if( checklink( $link ) ) { // true - otherwise, Wordpress will load its own     
        wp_deregister_script('jquery'); // remove jQuery v1
        wp_register_script('jquery', $link, array(), '3.3.1', true); // add jQuery v3
        wp_enqueue_script('jquery');
        wp_script_add_data( 'jquery', array( 'integrity', 'crossorigin' ), array( 'sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=', 'anonymous' ) );
    }   
// google fonts
    $link = 'https://fonts.googleapis.com/css?family=Raleway:300,400,400i,500|Ubuntu:300,400,400i,500&subset=latin-ext';
    $fallback = get_template_directory_uri() . '/fonts/thatwoman-fonts-min.css';
    if( checklink( $link ) ) {  
        wp_enqueue_style( 'custom-google-fonts', $link, false ); 
    } else {    
        wp_enqueue_style( 'custom-google-fonts', $fallback, false ); 
    }   
// touch events library
    $link = 'https://cdnjs.cloudflare.com/ajax/libs/jquery-touch-events/1.0.5/jquery.mobile-events.js';
    $fallback = get_template_directory_uri() . '/js/lib/jquery.mobile-events.min.js';
    if( checklink( $link ) ) {          
        wp_register_script('thatwoman-touch-events', $link, array( 'jquery' ), '1.0.5', true);
    } else {            
        wp_register_script('thatwoman-touch-events', $fallback, array( 'jquery' ), '1.0.5', true);
    }
    wp_enqueue_script('thatwoman-touch-events');
}
}
add_action( 'wp_enqueue_scripts', 'thatwomanuk_external_scripts' );

感谢@u_mulder让我明白了这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-03 01:20:58

您应该将您的函数简化为:

代码语言:javascript
复制
// Check to make sure external files are available
function checklink ($link) { 
    return (bool)@fopen( $link,'r');
}

之后,在你的代码中:

代码语言:javascript
复制
$link1Available = checklink($link1);
$link2Available = checklink($link2);
// etc

或者作为一个数组:

代码语言:javascript
复制
$links = ['link1', 'link2', 'link3'];
$linksAvailable = [];
foreach ($links as $link) {
    $linksAvailable[$link] = checklink($link);
}
票数 3
EN

Stack Overflow用户

发布于 2018-09-29 02:00:56

如果你只是想要一个CDN加载的js文件的本地回退,你可以使用在4.5中添加的wp_scripts()->add_inline_script(),添加一个js检查库是否加载,请参阅我在wordpress.stackexchange here上的详细答案。

简短的版本如下:

您可以使用wp_scripts()->add_inline_script(),它会将一个js脚本附加到一个已排队的脚本中,不会询问任何问题,也不会检查任何代码问题(有一个包装器函数wp_add_inline_script可以执行检查,但不允许使用</script>标记,即使是编码的也不允许)。

这是一个有效的示例

代码语言:javascript
复制
function _enqueue_my_scripts() {
  // the normal enqueue
  wp_enqueue_script( 'jquery-cdn', 'https://code.jquery.com/jquery-3.3.1.min.js' );
  // our custom code which will check for the existance of jQuery (in this case)
  wp_scripts()->add_inline_script( 'jquery-cdn',
    "window.jQuery || document.write('<script src=\"".get_template_directory_uri() ."/js/jQuery.js\">\\x3C/script>')", 'after');
}
add_action('wp_enqueue_scripts', '_enqueue_my_scripts', 100);

这将会给你

代码语言:javascript
复制
<script type='text/javascript' src='https://code.jquery.com/jquery-3.3.1.min.js'></script>
<script type='text/javascript'>
window.Swiper || document.write('<script src="http://localhost/wordpress/wp-content/themes/wp-theme/js/jQuery.js">\x3C/script>')
</script>

在您的HTML中。

根据您的需要替换'window.jQuery‘和'/js/jQuery.js’,但不要触摸该行的其余部分,因为它将通过正确的行传递到HTML。

票数 2
EN

Stack Overflow用户

发布于 2018-06-03 00:44:44

您有两次$$登录返回语句:

代码语言:javascript
复制
if( $try_url !== false ) { return $$checkname; } 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50659040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档