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

如何仅在表单提交时调用PHP的wp_update_post函数?

解决表单加载时自动执行wp_update_post()的问题

嘿,我懂你的困扰啦!现在你的wp_update_post()函数直接写在页面渲染代码里,所以每次页面加载(不管有没有提交表单)都会自动执行一遍。要让它只在点击Update按钮提交表单时才运行,最简单的办法就是先判断表单是否真的被提交了。

你可以通过两个核心条件来做判断:

  • 请求方法是POST(你的表单method已经设置为POST,只有提交表单时才会触发POST请求)
  • 提交按钮对应的字段存在于$_POST数组中(点击提交按钮后,update_content会被包含在请求参数里)

修改后的完整代码如下:

<form action="" method="POST" id="myForm" autocomplete="off">
    <textarea name="newContent" class="form-control" rows="10"><?php the_content(); ?></textarea>
    <p class="read-more"><button type="button" class="btn btn-danger">Read More</button></p>
    <input id="update_content" type="submit" value="Update">
    <?php
    // 只有表单被提交时,才执行更新逻辑
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_content'])) {
        $post = array(
            'ID' => $id,
            'post_content' => $_POST['newContent']
        );
        wp_update_post($post, true);
        
        // 可选:更新后跳回当前页面,避免用户刷新页面重复提交
        wp_redirect(get_permalink($id));
        exit;
    }
    ?>
</form>

额外安全小提示

虽然你要的是最简单的实现,但还是提一句:在实际WordPress开发中,建议加上非ceck验证来防止跨站请求伪造(CSRF),这是WordPress开发的安全最佳实践。

只需要两步:

  1. 在表单里添加一行非ceck字段:
<?php wp_nonce_field('update_post_content_action', 'post_content_nonce'); ?>
  1. 在判断条件里增加验证:
if ($_SERVER['REQUEST_METHOD'] === 'POST' 
    && isset($_POST['update_content'])
    && wp_verify_nonce($_POST['post_content_nonce'], 'update_post_content_action')
) {
    // 你的更新逻辑
}

内容的提问来源于stack exchange,提问作者rob.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:06