在保存后更新用户元数据

时间:2016-03-16 作者:charliek

我有一个自定义的帖子类型,叫做“计划”,详细介绍研讨会信息。使用表单,网站访问者可以注册特定的“计划”,一旦完成表单,将创建一个新用户,其中包含以下用户元:

节目id-在上注册的“节目”的邮政id节目名称-在上注册的“节目”标题节目结束日期-在用户注册后,“节目”结束日期通常会更改(由于场地可用等原因),因此,当发生这些更改时,我需要更新Program\\u end\\u date user元字段。

我知道这将是save_post 与一起采取的行动update_user_meta 大概是一个循环,用于检查Program\\u ID user meta字段中具有特定更新的“Program”ID的所有用户,但我可以了解具体的操作方法。任何指针都会很好。

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

您可以查询所有作者并循环更新他们的日期。下面的查询提取所有具有programme_id 当前的post_id 并分配其ID的数组。然后,您可以循环更新任何必要的内容:

/** Save Custom Metaboxes **/
function save_custom_meta_boxes( $post_id, $post ) {

    /** 
     * Your Testing conditions should go here to ensure
     * That we\'re in the correct place and actually need to
     * run this query. I suggest checking against post type 
     */

    $user_query = new WP_User_Query( array(
        \'meta_key\'  => \'programme_id\',
        \'meta_value\'=> $post_id,
        \'fields\'    => \'ID\',
    ) );

    if( ! empty( $user_query->results ) ) {
        foreach( $user_query->results as $user_id ) {
            update_user_meta( $user_id, \'programme_end_date\', $_POST[\'some_data_here\'] );
        }
    }
}
add_action( \'save_post\', \'save_custom_meta_boxes\', 10, 2 );
我尽可能简单,如果你有大量用户,这可能不是最佳选择。

SO网友:Christine Cooper

我有点不确定你的目标是什么,但我肯定能让你站起来。

所以你想加入save_post, 确认哪个post_status 您的目标是,然后根据需要更新用户/帖子元。

这是我为你写的,see the comments 如需澄清,请进行调整:

add_action(\'save_post\', \'wp_220873\', 10, 2);

function wp_220873($id, $p) {

    // confirm if post is being published (or whatever post status you\'re targetting)
    if (
        (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
        || (defined(\'DOING_AJAX\') && DOING_AJAX)
        || ($p->post_status !== \'publish\')
    ) {
        return;
    }

    // update post meta as you wish
    update_post_meta( $p->ID, \'meta_key\', $value );

    // update user meta as you wish
    update_user_meta( $p->post_author, \'meta_key\', $value );
}

SO网友:mmm

试试这个save_post

// search users which have this programme id

$args = array(
    "meta_query" => [
        [
            "key" => "programme_id",
            "value" => $programme_id,
        ]
    ],
);

$wp_user_search = new \\WP_User_Query($args);
$items = $wp_user_search->get_results();


foreach ($items as $user) {

    // update end date

    update_user_meta($user->ID, "programme_end_date", $programme_end_date);


}

相关推荐

添加用户角色:预先保存在User-Meta中[已解决]

我在用户注册后添加一个操作,以根据users meta\\u值添加另一个用户角色。使用时:add_action(\'um_after_save_registration_details\', \'custom_after_new_user_register\', 10, 2); function custom_after_new_user_register($user_id) { $user = get_user_by(\'id\', $user_id); if