将 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 🐾 步子哥の博客

最近浏览