如何在While循环中添加POST META?

时间:2017-10-21 作者:ThePs

我从meta值中获得了post id,并使用while循环来显示它们。现在我的问题是,我还需要一个表单来为每个帖子id添加另一个元键“rank”的元值(例如1,2,3)。

$args = array(
              \'meta_key\' => \'e_id\',
              \'meta_value\' => $eid,
              \'post_type\' => \'rsvp\',
              \'post_status\' => \'any\',
              \'posts_per_page\' => -1
          );
$the_query = new WP_Query( $args ); ?>

<form action="" method="post"><?
      if ( $the_query->have_posts() ) :
      while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <input type=\'text\' name=\'rank\' ><?   
      endwhile;
      endif;?>
      <input type="submit" name="submitBtn" value="Update"/>
    </form>
由于表单在单击提交按钮后将保持在同一页面上,所以我也做了类似的操作,但它没有按预期工作。

if(isset($_POST[\'submitBtn\'])){
              add_post_meta($post->ID, \'rank\', $_REQUEST[\'rank\'], true);
    }
我真的不知道该把它放在哪里,以及如何使它与循环一起工作。

提前感谢!

1 个回复
最合适的回答,由SO网友:Paul G 整理而成

您应该使用init 行动挂钩。从codex: init对于拦截$\\u GET或$\\u POST触发器很有用

以下代码只是一个示例,未经测试:

function wpse283607_handle_submit()
{
    // check if form is POSTed and nonce is valid
    if ( \'POST\' === $_SERVER[\'REQUEST_METHOD\']
         && wp_verify_nonce( $_REQUEST[\'_wpnonce\'], \'my-action\' ) ) {
        if ( !empty( $_REQUEST[\'rank\'] ) ) {
            $ranks = (array) $_REQUEST[\'rank\'];
            foreach ( $ranks as $post_id => $rank ) {
                add_post_meta( intval( $post_id ), \'rank\', intval( $rank ) );
            }
        }

        // redirect to the same page (to avoid re-submit form data on browser reload/refresh)
        wp_safe_redirect(
            remove_query_arg( [ \'_wp_http_referer\', \'_wpnonce\' ], wp_unslash( $_SERVER[\'REQUEST_URI\'] ) )
        );
        exit;
    }
}

add_action( \'init\', \'wpse283607_handle_submit\' );
然后你的<form> 看起来像:

<form action="" method="post"><?
    wp_nonce_field( \'my-action\' );
    /**
     * @var \\WP_Query $the_query
     */
    if ( $the_query->have_posts() ) :
        $i = 1; // not sure how you generate your "rank" but just an example
        while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <input type=\'text\' name=\'rank[<?php echo $post->ID ?>]\' value="<?php echo $i ?>" /><?
        $i++;
        endwhile;
        wp_reset_postdata();
    endif; ?>
    <input type="submit" name="submitBtn" value="Update" />
</form>

结束

相关推荐

将小部件类复制到unctions.php会出现一个空白页面

我试图通过从类wp widget recent posts复制整个类来创建自定义的recent posts widget。php到我的主题函数。但是当我这样做的时候,我只会得到一个空白页面。线以上的一切add_action( \'widgets_init\', \'my_custom_sidebar\' ); 工作正常。我的新功能。php:<?php // Register Custom Navigation Walker require_once(\'wp_bootstrap_na