如何仅在表单提交时调用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开发的安全最佳实践。
只需要两步:
- 在表单里添加一行非ceck字段:
<?php wp_nonce_field('update_post_content_action', 'post_content_nonce'); ?>
- 在判断条件里增加验证:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_content']) && wp_verify_nonce($_POST['post_content_nonce'], 'update_post_content_action') ) { // 你的更新逻辑 }
内容的提问来源于stack exchange,提问作者rob.m
相关产品推荐
相关产品推荐

