【问题标题】:Wordpress in foreach loop updating meta valuesforeach 循环中的 Wordpress 更新元值
【发布时间】:2016-02-15 22:08:25
【问题描述】:

我已经完成了 foreach 循环以将自定义帖子类型发送到前端。我有一个名为“order_status”的自定义字段。当我在循环中查看我的列表的前端时,我想添加一个按钮来将这个特定的帖子“order_status”更改为不同的值.. 我的代码..

<? foreach ( $postslist as $post ) :
   setup_postdata( $post );
?> 

<div class="profile_order_row">
   <a href="<?php the_permalink(); ?>"> <?php the_author(); ?> <?php the_title(); ?></a>
   <?php
      Global $post;
      if ( isset( $_POST['submit'] ) )
      {   
          if( ! isset( $post ) ) {
              echo 'Post not set';
              die();
          }
          else if( ! isset( $_POST['staatus'] ) && ! empty( $_POST['staatus'] ) ){
          echo 'Error';
          die();
          }

          $postid = $_POST['post_id'];
          update_post_meta($postid,'order_staatus','1');
      }

      $staatus = get_post_meta($post->ID, 'order_staatus', true);

      echo print_r($staatus);
   ?>

   <form method="post" action="">
      <input type="hidden" name="post_id" value="'.$post->ID.'" />
      <input type='text' name='staatus' value='<? echo $staatus ?>' />
      <input type='submit' value='save' />
   </form>

</div>


<?php endforeach; wp_reset_postdata(); ?>

【问题讨论】:

  • 你在哪里更新它?你如何更新它?阿贾克斯? update_post_meta 函数在哪里?
  • 这种逻辑应该放在functions.php或者自定义插件...
  • 您能否给出一些指示或示例我做错了什么?或者也许有人知道一些好的插件。 codex.wordpress.org/Function_Reference/update_post_meta

标签: php wordpress loops foreach meta-key


【解决方案1】:

我认为问题不在于函数update_post_meta。我认为更可能的问题是未设置$_POST['submit']。提交表单时,不会发送提交按钮的值。 value 属性仅用于分配按钮的文本。

我会像这样重写 IF 代码块:

  if ( isset( $_POST ) )
    {   

      if( ! isset( $_POST['staatus'] ) && ! empty( $_POST['staatus'] ) ){
        echo 'Error';
        die();
      }

      $postid = sanitize_text_field($_POST['post_id']);
      update_post_meta($postid,'order_staatus','1');
  }

请注意,我删除了 isset($post) 检查,因为您在定义 $postforeach ( $postslist as $post ) 内运行此代码,因此它将始终在该循环中设置。

我还添加了函数sanitize_text_field() 来清理post_id。这是避免 SQL 注入的重要安全措施。所有用户输入,包括 $_POST,都可能包含危险数据,需要在使用前进行清理。

希望这会有所帮助!

【讨论】:

  • 我理解并非常感谢您提供的信息!我猜函数 update_post_meta 存在问题,因为我认为更改帖子元数据是 wordpress 函数。然后我看了“update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '')" - 这是正确的wordpress函数,是否可以使用它来代替?
  • 不同之处在于update_post_meta只用于更新post相关的meta,而update_metadata可以用于更新其他类型的meta数据,如cmets和users相关的meta数据。
猜你喜欢
  • 1970-01-01
  • 2016-02-10
  • 2017-02-03
  • 2019-10-10
  • 2018-06-10
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多