秦始皇二一四个人官方网站
力求成长,愿与你同行

为wordpress添加dplayer的支持

dplayer是一个播放器,目前还在学习研究中,正如欢迎来到小秦的全新个人网站!文章中所展示的那样,尝试做了对接,在dplayer文档中,存在wordpress生态下的插件分享,但是看上去很久没更新了,我并未尝试,而是采用了wordpress的简码功能,尝试实现,效果:

其代码实际为:

[dplayer url="https://media.cdn.qyh0214.com/wow/wyzz.mp4"]

对接的方式是在主题的function.php中加入如下代码:

<?php
// 注册并加载DPlayer资源
function dplayer_enqueue_scripts() {
    // 注册DPlayer JS
    wp_register_script('dplayer', 'https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js', array(), null, true);
}
add_action('wp_enqueue_scripts', 'dplayer_enqueue_scripts');

// DPlayer短代码处理函数
function dplayer_shortcode($atts) {
    // 确保加载DPlayer脚本
    wp_enqueue_script('dplayer');

    // 生成唯一ID
    $player_id = 'dplayer-' . uniqid();

    // 默认参数
    $default_atts = array(
        'url' => '',
        'autoplay' => false,
        'theme' => '#7E57C2',
        'loop' => false,
        'lang' => 'zh-cn',
        'screenshot' => false,
        'hotkey' => true,
        'preload' => 'auto',
        'volume' => 0.7,
        'mutex' => true,
        'width' => '100%',
        'height' => '', // 改为空,让CSS控制
        'poster' => '',
        'subtitle' => '',
        'subtitle_type' => 'webvtt',
        'ratio' => '16:9', // 新增宽高比参数
    );

    // 解析短代码属性
    $atts = shortcode_atts($default_atts, $atts, 'dplayer');

    if (empty($atts['url'])) {
        return '<div style="color: red; padding: 10px; border: 1px solid red;">DPlayer错误:请提供视频URL地址</div>';
    }

    // 准备配置(注意:这里不包含 container)
    $config = array(
        'video' => array(
            'url' => $atts['url'],
        ),
        'autoplay' => (bool) $atts['autoplay'],
        'theme' => $atts['theme'],
        'loop' => (bool) $atts['loop'],
        'lang' => $atts['lang'],
        'screenshot' => (bool) $atts['screenshot'],
        'hotkey' => (bool) $atts['hotkey'],
        'preload' => $atts['preload'],
        'volume' => (float) $atts['volume'],
        'mutex' => (bool) $atts['mutex'],
    );

    if (!empty($atts['poster'])) {
        $config['video']['pic'] = $atts['poster'];
    }

    if (!empty($atts['subtitle'])) {
        $config['subtitle'] = array(
            'url' => $atts['subtitle'],
            'type' => $atts['subtitle_type'],
        );
    }

    // 创建初始化脚本 - 修正 container 的写法
    $init_script = "
        (function() {
            function initDPlayer() {
                if (typeof DPlayer !== 'undefined') {
                    var container = document.getElementById('" . esc_js($player_id) . "');
                    if (container) {
                        var config = " . wp_json_encode($config) . ";
                        config.container = container;
                        new DPlayer(config);
                    }
                } else {
                    setTimeout(initDPlayer, 100);
                }
            }

            if (document.readyState === 'loading') {
                document.addEventListener('DOMContentLoaded', initDPlayer);
            } else {
                initDPlayer();
            }
        })();
    ";

    // 添加内联脚本
    wp_add_inline_script('dplayer', $init_script);

    // 处理宽高比
    $container_classes = 'dplayer-container';
    $style_attrs = '';

    // 如果设置了具体的height值,使用固定高度
    if (!empty($atts['height'])) {
        $style_attrs = sprintf(
            'width: %s; height: %s; max-width: 100%%;',
            esc_attr($atts['width']),
            esc_attr($atts['height'])
        );
    } 
    // 否则使用宽高比
    else {
        $ratio = $atts['ratio'];
        $container_classes .= ' dplayer-responsive';

        // 解析宽高比 (支持格式: "16:9", "4:3", "21:9", "1:1" 等)
        if (strpos($ratio, ':') !== false) {
            list($width_ratio, $height_ratio) = explode(':', $ratio, 2);
            if (is_numeric($width_ratio) && is_numeric($height_ratio) && $height_ratio > 0) {
                $padding_percentage = ($height_ratio / $width_ratio) * 100;
            } else {
                $padding_percentage = 56.25; // 16:9 的默认值
            }
        } else {
            $padding_percentage = 56.25; // 16:9 的默认值
        }

        // 添加响应式容器和内层播放器
        return sprintf(
            '<div class="%s" style="width: %s; max-width: 100%%; position: relative; padding-bottom: %.2f%%;">' .
            '<div id="%s" style="position: absolute; top: 0; left: 0; width: 100%%; height: 100%%;"></div>' .
            '</div>',
            esc_attr($container_classes),
            esc_attr($atts['width']),
            $padding_percentage,
            esc_attr($player_id)
        );
    }

    // 返回播放器容器(固定高度版本)
    return sprintf(
        '<div id="%s" class="%s" style="%s"></div>',
        esc_attr($player_id),
        esc_attr($container_classes),
        $style_attrs
    );
}
add_shortcode('dplayer', 'dplayer_shortcode');

// 可选:添加一些CSS样式来美化播放器
function dplayer_enqueue_styles() {
    $custom_css = '
        .dplayer-responsive {
            display: block;
            overflow: hidden;
            background: #000;
        }
        .dplayer-responsive > div {
            border-radius: 4px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.2);
        }
    ';
    wp_add_inline_style('wp-block-library', $custom_css);
}
add_action('wp_enqueue_scripts', 'dplayer_enqueue_styles');
?>

这样在文章中添加形如上文的简码就可以实现内嵌播放器并播放啦~

当然,很多wordpress主题、插件甚至原生就可以直接使用video标签实现播放,但是引用外部的一些插件组件,可能会提供更加多的功能和可定制化。

以上部分内容使用人工智能辅助生成或改进

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《为wordpress添加dplayer的支持》
文章链接:https://www.qyh.name/71/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

始皇娱乐综合娱乐平台——基网SNET

魔兽世界、魔兽争霸、星际争霸、暗黑破坏神、幻兽帕鲁、影视中心以及更多

了解详情立即加入

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫