有点乱。我通过一个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 \'\';}
}
最合适的回答,由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
}