WordPress中使用update_post_meta将表单字段值存入自定义字段的问题
WordPress中使用update_post_meta将表单字段值存入自定义字段的问题
嗨,作为WordPress新手碰到这个问题很正常,我来帮你梳理下问题所在并修正代码~
你的核心问题出在调用顺序上:你现在先尝试获取帖子ID,再创建帖子,这时候get_the_ID()拿到的根本不是你刚要创建的新帖子ID(要么是空值,要么是当前页面的ID),自然没法把元数据关联到正确的帖子上。
修正后的代码
<?php ////////// INSERT WP POST if (isset($_POST['fname']) && isset($_POST['gname']) && isset($_POST['hname'])) { // 先对用户输入做安全处理,避免XSS或其他安全问题 $post_title = sanitize_text_field($_POST['fname']); $post_content = sanitize_textarea_field($_POST['hname']); $gname_value = sanitize_text_field($_POST['gname']); $my_post = array( 'post_type' => 'job', 'post_title' => $post_title, 'post_content' => $post_content, 'post_status' => 'publish', ); // 先创建帖子,获取返回的新帖子ID $post_id = wp_insert_post($my_post); // 确认帖子创建成功后,再更新自定义字段 if (!is_wp_error($post_id)) { update_post_meta($post_id, 'budget', $gname_value); } } ?>
关键修改点说明
- 调整调用顺序:先执行
wp_insert_post()创建帖子,它会返回新帖子的ID,我们把这个ID存到$post_id变量里,再用这个ID去调用update_post_meta(),这样元数据才能准确关联到刚创建的帖子上 - 增加安全处理:用
sanitize_text_field()和sanitize_textarea_field()对用户输入进行清洗,避免恶意代码注入,这是WordPress开发里的基础安全规范 - 增加错误判断:用
is_wp_error()检查帖子是否创建成功,避免创建失败时执行无效的元数据更新操作
补充:如何在表单中显示budget字段的值
如果要让那个name="budget"的输入框显示已存储的值,你可以这样写:
<input type="text" name="budget" value="<?php echo esc_attr(get_post_meta(get_the_ID(), 'budget', true)); ?>" style="width:100%;" fdprocessedid="ectck">
这里用get_post_meta()获取自定义字段的值,并用esc_attr()转义,避免输出时出现安全问题或页面渲染异常。
备注:内容来源于stack exchange,提问作者Eldyssss
相关产品推荐
相关产品推荐

