【问题标题】:update post meta wordpress更新后元 wordpress
【发布时间】:2023-03-25 17:09:01
【问题描述】:

!问题解决了,新问题....

                    <?php
if ( isset( $_POST['submit'] ) )
    { //if nonce check succeeds.
        global $post;
        $postid = $auto->ID;
        $data = $_POST['doors'];
        update_post_meta($postid, 'doors', $data );

}


$doors = get_post_meta($auto->ID, 'doors', true);
?>

<form method="post" action="">
   <input type='text' name='doors' value='<?php echo $doors ?>' />
   <input type='submit' value='save' name="submit"/>
</form>

现在它起作用了,但我的新问题是所有字段都获得相同的值....,看看 img http://oi58.tinypic.com/2qtd5p4.jpg

【问题讨论】:

  • global 仅在函数中使用(或者您的文件可能包含在函数内部?)
  • 为什么要这样?你永远不会传入$data,所以你提交的任何东西都会丢失。
  • @MarcB 啊啊啊啊真的!你知道怎么改吗?:)
  • 这是链接到单个帖子视图还是仅链接到一个页面?
  • 嘿,这本身就是一个页​​面@David

标签: php wordpress post meta


【解决方案1】:

好的,您的问题是每个循环都在更新每个项目。这是因为您正在测试是否有 $_POST 的值,更新它。您需要设置一个标识符,以便它知道要更新哪个帖子。

例如,但输入字段中的帖子 ID。

<input type='text' name='doors[<?php echo $auto->ID; ?>]' value='<?php echo isset($doors) ? $doors : ''; ?>' />

然后您可以从此变量进行更新。

if ( isset( $_POST['doors'] ) ){  
// verify nounce prob a good idea 
    foreach($_POST['doors'] as $item=>$key) {
        $id= sanitize_text_field($item);
        update_post_meta( $id, 'doors', sanitize_text_field( $key ) );
    }   
}

注意这个 $_POST 代码出现在循环中(在 foreach 语句和 endforeach 之间)。将其移到页面顶部的循环之外以保存它每次运行。现在,您还可以在每次提交时更新多个值。您还需要以某种方式检查这些值,以防止有人在他们喜欢的任何帖子上更改 postmeta(他们只需要在 post[doors][postid] 更改任何门值)。

【讨论】:

  • 如果您在 pastebin 上更新文件,请查看。
  • 你可以做一个重置按钮吗?
  • 好的,你需要在你的输入上方添加这一行 $doors= get_post_meta($auto->ID, 'doors', true);重置按钮是什么意思?
  • 那没用?我的输入将被隐藏,我怎样才能获得一个清除​​按钮来清除值?:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2017-01-11
  • 2016-09-02
相关资源
最近更新 更多