检测Safari桌面浏览器并将检测包含在短码中

时间:2017-04-21 作者:Nate M.

有点乱。我通过一个PHP文件来保护我的mp3/ogg文件不被直接访问。我在移动设备上通过PHP提供音频时遇到了一些大问题,因此我安装了mobile\\u Detect,以便有条件地将直接音频url提供给移动用户,将PHP url提供给桌面用户。我在函数中创建了短代码。php

include_once( get_stylesheet_directory() . \'/Mobile_Detect.php\');


//ISMOBILE SHORTCODE
add_shortcode( \'ismobile\', \'ismobile_shortcode\' );
function ismobile_shortcode( $atts, $content = null ) {
$detect = new Mobile_Detect();
if( $detect->isMobile() ) {
return do_shortcode($content);
} else {
return \'\';}
}

//ISNOTMOBILE SHORTCODE
add_shortcode( \'isnotmobile\', \'isnotmobile_shortcode\' );
function isnotmobile_shortcode( $atts, $content = null ) {
$detect = new Mobile_Detect();
if( !$detect->isMobile() ) {
return do_shortcode($content);
} else {
return \'\';}
}
现在,当我在帖子中有一个音频播放器时,我会在每个短代码中创建它的两个实例。移动用户可以看到链接到直接音频url的音频播放器,桌面用户可以看到链接到PHP脚本的音频播放器。

除了Safari desktop browser. 音频播放器不会搜索,结束时间显示NaN:NaN。通过谷歌搜索这个问题,似乎自2010年Safari和通过PHP提供音频以来,这一直是一个问题。

我想如果我能检测到Safari桌面浏览器,我可以将其包含在我的“ismobile”短代码中,这样真正的音频链接就会发送给Safari桌面用户。有意义吗?

我找到了这个https://stackoverflow.com/a/9851769/1131465 但我不知道如何在我的具体案例中实施它。

EDIT:根据Vinod的回答,以下是我的新短代码功能,用于检测Safari桌面:

include_once( get_stylesheet_directory() . \'/Mobile_Detect.php\');
//ISMOBILE SHORTCODE
add_shortcode( \'ismobile\', \'ismobile_shortcode\' );
function ismobile_shortcode( $atts, $content = null ) {
$detect = new Mobile_Detect();
global $is_safari;
if ( $detect->isMobile() ) {
return do_shortcode($content);
} elseif ( $is_safari ) {
return do_shortcode($content);
} else {
return \'\';}
}

//ISNOTMOBILE SHORTCODE
add_shortcode( \'isnotmobile\', \'isnotmobile_shortcode\' );
function isnotmobile_shortcode( $atts, $content = null ) {
$detect = new Mobile_Detect();
global $is_safari;
if( !$detect->isMobile() && !$is_safari ) {
return do_shortcode($content);
} else {
return \'\';}
}

1 个回复
最合适的回答,由SO网友:Vinod Dalvi 整理而成

您可以使用WordPress全局变量$is\\u safari(如以下所示)来检测浏览器是否为safari浏览器。

global $is_safari;

if ( $is_safari ) {
    // This is safari browser
}
要检测浏览器是否为safari桌面浏览器,可以使用以下条件。

global $is_safari;

if ( ! wp_is_mobile() && $is_safari ) {
    // This is desktop safari browser
}

相关推荐

Do not parse shortcode in CPT

我有一个CPT,我不想在它的内容中解析shortcode(使用\\u content()函数)。我可以使用remove\\u filter删除短代码的默认过滤器。但我如何确定我只是为了我想要的CPT而删除过滤器?我有一个在页面中使用的快捷码[我的自定义快捷码]。此短代码使用WP\\U查询和输出CPT帖子。我不想在这篇CPT文章中分析短代码。我是否应该在短代码解析挂钩之前用虚拟内容更改短代码,并在之后替换回来?或者我应该在我的CPT输出之前删除短代码的默认过滤器,然后在我的CPT输出完成后再次添加短代码的默