标签: ddd

  • 将 IPFS 分布式文件系统集成到 WordPress

    下面给出的插件代码,帮助你实现将 IPFS 分布式文件系统集成到 WordPress,并实现文件分享和图床功能。该插件实现的核心功能包括:

    1. 在文章编辑页面添加侧边栏元数据输入框
      允许用户输入 IPFS 的 CID(例如 QmNvT9MEHZCvLcJGHc763Jw5unKVNb7b1FHRHrD7uwNVfT)和文件名(例如 xxxx.pdf)。
    2. 保存输入的元数据
      使用 save_post 钩子保存用户输入的 CID 和文件名。
    3. 前端展示文件链接
      当文章中包含了 IPFS 配置元数据时,自动在文章内容或指定位置输出分享链接,链接的格式为: https://www.dreamlink.cloud/explorer?cid=CID值&name=文件名

    你可以根据下面的代码自定义和扩展更多功能。


    插件代码示例

    将下面代码保存为 ipfs-integration.php 并放在 WordPress 的插件目录 wp-content/plugins/ipfs-integration/ 下,然后在后台激活即可使用。

    <?php
    /*
    Plugin Name: IPFS分布式文件分享与图床插件
    Description: 将IPFS分布式文件系统集成到WordPress,并提供分布式文件分享和图床功能。在文章编辑时,可输入IPFS的CID和文件名,生成对应的分享链接。
    Version: 1.0
    Author: Steper
    */
    
    // 防止直接访问
    if ( ! defined( 'ABSPATH' ) ) exit;
    
    /**
     * 在文章编辑页面添加一个侧边栏元数据框,用于输入IPFS CID和文件名
     */
    function ipfs_add_meta_box() {
        add_meta_box(
            'ipfs_meta_box',           // Unique ID
            'IPFS 配置',               // Title
            'ipfs_meta_box_callback',  // Callback function
            'post',                    // Screen: 这里设置为 post 类型,如果需要支持其他类型,请调整
            'side',                    // Context
            'default'                  // Priority
        );
    }
    add_action( 'add_meta_boxes', 'ipfs_add_meta_box' );
    
    /**
     * 渲染元数据框内容
     *
     * @param WP_Post post 当前文章对象  */ function ipfs_meta_box_callback(post ) {
        // 添加安全字段,防止CSRF攻击
        wp_nonce_field( 'ipfs_save_meta_box_data', 'ipfs_meta_box_nonce' );
    
        // 获取现有值(如果有的话)
        ipfs_cid       = get_post_meta(post->ID, '_ipfs_cid', true );
        ipfs_filename  = get_post_meta(post->ID, '_ipfs_filename', true );
        ?>
        <p>
            <label for="ipfs_cid"><strong>IPFS CID地址</strong></label><br>
            <input type="text" id="ipfs_cid" name="ipfs_cid" value="<?php echo esc_attr( ipfs_cid ); ?>" style="width: 100%;" placeholder="例如:QmNvT9MEHZCvLcJGHc763Jw5unKVNb7b1FHRHrD7uwNVfT">                   <label for="ipfs_filename"><strong>文件名</strong></label>         <input type="text" id="ipfs_filename" name="ipfs_filename" value="<?php echo esc_attr(ipfs_filename ); ?>" style="width: 100%;" placeholder="例如:xxxx.pdf">
        </p>
        <?php
    }
    
    /**
     * 保存元数据框中输入的数据
     *
     * @param int post_id 文章ID  */ function ipfs_save_meta_box_data(post_id ) {
    
        // 检查 nonce 是否设置
        if ( ! isset( _POST['ipfs_meta_box_nonce'] ) ) {         return;     }     // 校验 nonce 有效性     if ( ! wp_verify_nonce(_POST['ipfs_meta_box_nonce'], 'ipfs_save_meta_box_data' ) ) {
            return;
        }
        // 如果是自动保存,直接返回
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
            return;
        }
        // 检查用户权限
        if ( isset( _POST['post_type'] ) && 'page' ==_POST['post_type'] ) {
            if ( ! current_user_can( 'edit_page', post_id ) ) {             return;         }     } else {         if ( ! current_user_can( 'edit_post',post_id ) ) {
                return;
            }
        }
    
        // 存储或更新IPFS CID
        if ( isset( _POST['ipfs_cid'] ) ) {ipfs_cid = sanitize_text_field( _POST['ipfs_cid'] );         update_post_meta(post_id, '_ipfs_cid', ipfs_cid );     }      // 存储或更新文件名     if ( isset(_POST['ipfs_filename'] ) ) {
            ipfs_filename = sanitize_text_field(_POST['ipfs_filename'] );
            update_post_meta( post_id, '_ipfs_filename',ipfs_filename );
        }
    }
    add_action( 'save_post', 'ipfs_save_meta_box_data' );
    
    /**
     * 在文章内容前/后追加生成的IPFS分享链接
     *
     * 这里我们通过过滤器输出IPFS链接,你也可以灵活调整位置和展示方式或者使用短代码
     */
    function ipfs_append_share_link( content ) {     if ( is_singular( 'post' ) ) {         globalpost;
            ipfs_cid      = get_post_meta(post->ID, '_ipfs_cid', true );
            ipfs_filename = get_post_meta(post->ID, '_ipfs_filename', true );
    
            if ( ! empty( ipfs_cid ) && ! empty(ipfs_filename ) ) {
                url  = "https://www.dreamlink.cloud/explorer?cid=" . urlencode(ipfs_cid ) . "&name=" . urlencode( ipfs_filename );link_html = '<div class="ipfs-share-link" style="margin-top:20px; padding:10px; border:1px solid #ddd;">';
                link_html .= '<strong>IPFS文件分享链接: </strong><a href="' . esc_url(url ) . '" target="_blank">' . esc_html( url ) . '</a>';link_html .= '</div>';
                // 这里我们选择将分享链接追加到文章末尾
                content .=link_html;
            }
        }
        return content; } add_filter( 'the_content', 'ipfs_append_share_link' );  /**  * 添加短代码,用于在文章任意位置显示IPFS分享链接  *  * 使用方式: [ipfs_share_link]  */ function ipfs_share_link_shortcode() {     globalpost;
        ipfs_cid      = get_post_meta(post->ID, '_ipfs_cid', true );
        ipfs_filename = get_post_meta(post->ID, '_ipfs_filename', true );
        if ( ! empty( ipfs_cid ) && ! empty(ipfs_filename ) ) {
            url  = "https://www.dreamlink.cloud/explorer?cid=" . urlencode(ipfs_cid ) . "&name=" . urlencode( ipfs_filename );         return '<div class="ipfs-share-link" style="padding:10px; border:1px solid #ddd;"><strong>IPFS文件分享链接: </strong><a href="' . esc_url(url ) . '" target="_blank">' . esc_html( $url ) . '</a></div>';
        }
        return '';
    }
    add_shortcode( 'ipfs_share_link', 'ipfs_share_link_shortcode' );
    

    使用说明

    1. 安装和激活插件
      • 将上述代码保存为 ipfs-integration.php,放入 wp-content/plugins/ipfs-integration 文件夹中。
      • 进入 WordPress 后台 → 插件菜单,启用 IPFS分布式文件分享与图床插件
    2. 配置文章中的IPFS链接
      • 打开或创建一个文章,在右侧边栏会看到 “IPFS 配置” 元数据框。
      • 在输入框中填入 IPFS 的 CID(例如 QmNvT9MEHZCvLcJGHc763Jw5unKVNb7b1FHRHrD7uwNVfT)和对应的文件名(例如 xxxx.pdf)。
      • 保存或更新文章。
    3. 前端效果展示
      • 每当展示文章内容时,页面会在文章底部自动追加一个分享链接,链接形如: https://www.dreamlink.cloud/explorer?cid=QmNvT9MEHZCvLcJGHc763Jw5unKVNb7b1FHRHrD7uwNVfT&name=xxxx.pdf
      • 你也可以在文章中任意位置使用 [ipfs_share_link] 短代码来显示该链接。
    4. 扩展和自定义
      • 可根据需要调整展示位置、样式或增加其他功能;
      • 如需要在媒体库中显示分布式图片效果,可进一步扩展。

    这个示例插件提供了一个基本实现,你可以根据业务需求进一步扩展功能和样式。

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客