狐狸聚合登录,欢迎各位站长接入!

子比主题美化 – 古腾堡实况图预览模块

免费领流量卡 流量卡包邮 本站同款主题 广告招租

教程代码并非截图所示样式,教程代码理论上wordpress通用,可以在任意的主题使用实况图预览,当然也并非百分百可用,仅理论实现此功能,如您有一定的代码基础,亦可按照适合自己主题的样式编写这个区块样式及功能

实现原理

WordPress 中引入 LivePhotosKit JS 库来支持实况图,并创建一个自定义古腾堡区块

首先,我们需要在 WordPress 中引入 LivePhotosKit JS 库

在你的主题的 functions.php 文件中添加以下代码:

function enqueue_livephotoskit_script() {
    wp_enqueue_script('livephotoskit-js', 'https://cdn.apple-livephotoskit.com/lpk/1/livephotoskit.js', array(), null, true);
}
add_action('wp_enqueue_scripts', 'enqueue_livephotoskit_script');

这段代码将在你的 WordPress 站点上加载 LivePhotosKit JS 库

接下来,我们将创建一个自定义 Gutenberg 区块,使用户能够方便地在区块编辑器中添加支持实况图的区域

function register_custom_live_photos_block() {
    wp_register_script(
        'custom-live-photos-block',
        get_template_directory_uri() . '/block.js',
        array('wp-blocks', 'wp-element', 'wp-editor', 'wp-components', 'wp-i18n'),
        filemtime(get_template_directory() . '/block.js')
    );

    register_block_type('custom/live-photos-block', array(
        'editor_script' => 'custom-live-photos-block',
        'render_callback' => 'render_custom_live_photos_block'
    ));
}
add_action('init', 'register_custom_live_photos_block');

function render_custom_live_photos_block($attributes) {
    if (!isset($attributes['photoURL']) || !isset($attributes['videoURL'])) {
        return '';
    }

    $width = '100%';
    $height = '300px'; // Example fixed height, adjust as necessary

    return sprintf(
        '<div class="live-photo-wrapper" style="width:%s; height:%s; position:relative;">
            <div data-live-photo data-photo-src="%s" data-video-src="%s" style="width:100%%; height:100%%;"></div>
        </div>',
        esc_attr($width),
        esc_attr($height),
        esc_url($attributes['photoURL']),
        esc_url($attributes['videoURL'])
    );
}

主题跟目录创建一个 JavaScript 文件 block.js,并添加以下代码

(function (blocks, editor, element, components) {
    var el = element.createElement;
    var MediaUpload = editor.MediaUpload;
    var InspectorControls = editor.InspectorControls;
    var TextControl = components.TextControl;

    blocks.registerBlockType('custom/live-photos-block', {
        title: 'Live Photos Block',
        icon: 'camera',
        category: 'media',
        attributes: {
            photoURL: {
                type: 'string',
                default: ''
            },
            videoURL: {
                type: 'string',
                default: ''
            },
            width: {
                type: 'number',
                default: 400
            },
            height: {
                type: 'number',
                default: 300
            }
        },

        edit: function (props) {
            var attributes = props.attributes;
            var setAttributes = props.setAttributes;

            return el(
                'div',
                { className: props.className },
                el('p', {}, '选择图片和视频:'),
                el(
                    MediaUpload,
                    {
                        onSelect: function (media) {
                            setAttributes({ photoURL: media.url });
                        },
                        allowedTypes: 'image',
                        render: function (obj) {
                            return el(components.Button, {
                                className: attributes.photoURL ? 'image-button' : 'button button-large',
                                onClick: obj.open
                            },
                                !attributes.photoURL ? '选择图片' : el('img', { src: attributes.photoURL })
                            );
                        }
                    }
                ),
                el(
                    MediaUpload,
                    {
                        onSelect: function (media) {
                            setAttributes({ videoURL: media.url });
                        },
                        allowedTypes: 'video',
                        render: function (obj) {
                            return el(components.Button, {
                                className: 'button button-large',
                                onClick: obj.open
                            },
                                '选择视频'
                            );
                        }
                    }
                ),
                el(InspectorControls, {},
                    el(TextControl, {
                        label: '宽度(px)',
                        value: attributes.width,
                        onChange: function (value) {
                            setAttributes({ width: parseInt(value, 10) || 0 });
                        }
                    }),
                    el(TextControl, {
                        label: '高度(px)',
                        value: attributes.height,
                        onChange: function (value) {
                            setAttributes({ height: parseInt(value, 10) || 0 });
                        }
                    })
                )
            );
        },

        save: function () {
            // 后台通过 PHP 渲染,前端保存为空
            return null;
        }
    });
}(
    window.wp.blocks,
    window.wp.editor,
    window.wp.element,
    window.wp.components
));

本文最后更新于2024-08-18 18:54:14,若文章内容或链接失效,请 留言 QQ群 反馈!
© 版权声明
THE END
如果喜欢,可以【点赞】【分享】【收藏】
点赞0赞赏 分享
相关推荐
评论 抢沙发

请登录后发表评论

    暂无评论内容