You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义WordPress插件上传媒体文件时无法创建页面求助

问题诊断与解决方案

你的插件未生效,核心问题集中在钩子触发逻辑、内容处理细节以及缺少错误排查机制上,以下是具体分析和修正方案:

问题点梳理

  1. 内容赋值覆盖:$post_content被二次赋值,导致第一段说明文字丢失
  2. 未区分附件新增/更新:wp_insert_attachment钩子在附件创建和更新时都会触发,可能导致重复创建或无意义执行
  3. 标题获取时机问题:刚插入附件时用get_the_title可能因缓存无法正确读取标题
  4. 缺少错误反馈:未检查wp_insert_post的返回值,无法确认页面创建是否因权限、标题重复等原因失败

修正后的完整代码

<?php
/**
 * Plugin Name: Automatic Download Page Creator
 * Plugin URI: https://example.com/automatic-download-page-creator
 * Description: Automatically creates a page or post with a download link for a file when it is uploaded to the media library.
 * Version: 1.0
 * Author: Wisecraft
 * Author URI: https://example.com
 * License: GPL2
 */

// Hook into the 'wp_insert_attachment' action
add_action( 'wp_insert_attachment', 'create_download_page', 10, 2 );

// Custom function to create the download page or post
function create_download_page( $attachment_id, $attachment ) {
    // 仅处理首次发布的附件,排除更新/修订操作
    if ( wp_is_post_revision( $attachment_id ) || get_post_status( $attachment_id ) !== 'publish' ) {
        return;
    }

    // 优先从附件参数读取标题,避免缓存延迟问题
    $post_title = isset( $attachment['post_title'] ) ? $attachment['post_title'] : get_the_title( $attachment_id );
    $file_url = wp_get_attachment_url( $attachment_id );

    // 正确拼接页面内容,避免覆盖
    $post_content = '<p>Click the link below to download the file:</p>';
    $post_content .= '<p><a href="' . esc_url( $file_url ) . '">Download ' . esc_html( $post_title ) . '</a></p>';

    // 准备页面参数,添加安全过滤与必要字段
    $new_post = array(
        'post_type'     => 'post', // 改为'page'可创建页面
        'post_title'    => esc_html( $post_title ),
        'post_content'  => $post_content,
        'post_status'   => 'publish',
        'post_author'   => get_current_user_id(),
        'post_parent'   => 0,
    );

    // 插入页面并记录错误日志
    $post_id = wp_insert_post( $new_post );
    if ( is_wp_error( $post_id ) ) {
        error_log( 'Download Page Creation Error: ' . $post_id->get_error_message() );
        return;
    }
}
?>

关键改进说明

  • 触发逻辑优化:通过wp_is_post_revision和get_post_status确保仅在附件首次发布时执行创建操作
  • 安全防护:使用esc_url和esc_html过滤URL与标题,避免XSS漏洞
  • 内容修复:用.=代替=保留两段说明内容
  • 错误排查:添加错误日志记录,方便定位页面创建失败原因(如权限不足、标题重复)
  • 可靠数据读取:优先从钩子传入的$attachment参数获取标题,避免缓存导致的空值问题

测试步骤

  1. 确保插件已在WordPress后台激活
  2. 上传新文件到媒体库(不要更新现有附件)
  3. 查看文章/页面列表,确认对应标题的内容已生成
  4. 若仍无效果,开启WordPress调试模式(在wp-config.php中添加define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);),查看wp-content/debug.log中的错误信息

内容的提问来源于stack exchange,提问作者Serkan Başak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:45:33