操作挂钩不能与前端表单中的UPDATE_POST_META一起使用的原因?另类选择?

时间:2015-05-23 作者:WorkingMan8798

下面的代码在我插入帖子/提交表单时使用add\\u post\\u meta时有效。页面刷新完美无瑕(请参阅How can I fix a slow redirect after form submit from frontend (no plugin)?). 然而,当使用我打算使用update\\u post\\u meta为我的自定义帖子类型更新帖子meta的表单时,我似乎无法获得相同的效果。

function wpd_check_submission(){
    if( isset( $_POST[\'start\'] ) ) {
        // do your post insertion here
    }
}
add_action( \'init\', \'wpd_check_submission\' );
有人能帮我指出正确的方向吗?我找不到一个明确的答案。我尝试使用save\\u post挂钩,将if-isset行直接放在我的表单之后,将update\\u post\\u元函数直接添加到正在工作的函数中。我已经开始阅读关于更新post meta的do\\u操作方法,这些方法已经更新了\\u post\\u meta和update\\u post\\u meta--我真的很困惑。

下面是一个示例:有效的代码:

   function ty_save_post_data() {

    if( isset( $_POST[\'start\'] ) ) { 

        $post = array(
        \'post_title\' => $_POST[ \'mfname\' ],
        \'post_status\' => \'publish\', 
        \'post_type\' => \'add-members\' 
        );  


        $post_id = wp_insert_post($post); 

        add_post_meta($post_id, \'mfname\', sanitize_text_field( $_POST[ \'mfname\' ] ), true);
        add_post_meta($post_id, \'mem\', sanitize_text_field( $_POST[ \'mem\' ] ), true);
        add_post_meta($post_id, \'mpw\', esc_attr( $_POST[\'mpw\'] ), true);
        add_post_meta($post_id, \'second-nom\', sanitize_text_field( $_POST[ \'second-nom\' ] ), true );
    } 
    }

add_action( \'init\', \'ty_save_post_data\' );
失败的代码:

function ty_save_post_data1() { 
if( isset( $_POST[\'isecond\'] ) ) { 
   update_post_meta( get_the_ID(), \'second-nom\', sanitize_text_field( $_POST[\'second-nom\'] ) );
   update_post_meta( get_the_ID(), \'second-nom-date\', sanitize_text_field( $_POST[\'second-nom-date\'] ) );
   update_post_meta( get_the_ID(), \'approved\', sanitize_text_field( $_POST[\'approved\'] ) );    
}
}

add_action( \'init\', \'ty_save_post_data1\' );

HERE IS THE UPDATED WORKING VERSION OF THE FAILED CODE EXAMPLE

//hidden field added to form that grabs the post ID
<input type="hidden" name="post_id" id="post_id" value="<?php echo get_the_ID(); ?>" />

<?php function ty_save_post_data1() { 
if( isset( $_POST[\'isecond\'] ) ) {

   $post_id1 = $_POST[\'post_id\'];

   update_post_meta( $post_id1, \'second-nom\', sanitize_text_field( $_POST[\'second-nom\'] ) );
   update_post_meta( $post_id1, \'second-nom-date\', sanitize_text_field( $_POST[\'second-nom-date\'] ) );
   update_post_meta( $post_id1, \'approved\', sanitize_text_field( $_POST[\'approved\'] ) );    
}
}

add_action( \'init\', \'ty_save_post_data1\' );
?>

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

失败代码的上下文并不完全清楚,但它之所以失败是因为get_the_ID() 在上运行时不会返回帖子IDinit 钩子,因为主查询尚未执行。

如果你看看Action Reference, wp 如果代码在当前查看的帖子上运行,则是可以访问当前查询数据的最早操作。如果您的代码在其他帖子上运行,则需要将该帖子的ID与其他表单数据一起传递。

结束

相关推荐

Link Forms on Wordpress

在我们的Wordpress网站上,我们有一个由一系列(单选按钮式)问题组成的表单。根据用户对特定问题的回答,我们希望向用户显示不同的表单。也就是说,我们希望将多个表单链接到一个主表单。这可能吗?如果是这样的话,有人能解释一下如何做到这一点,或者给我指一些可能有用的资源吗?我对Wordpress很陌生。