如何在存储数据后返回选中的复选框?

时间:2016-02-02 11:09:40

标签: php html wordpress

我已经在wordpress中创建了所有客户的复选框列表。

数据存储在我的自定义表wp_assigned_products中,当用户输入时,我得到post_id(产品ID),meta_key(客户关键字),meta_value(客户ID)和分配(是或否)值已选中,帖子已更新。

一旦页面被重新播放,我无法知道如何为已检查用户返回一个复选框。

我的复选框全为空,但记录已保存到数据库表中。任何人都可以给我一个正确的方向吗?我一直在研究这个问题几个小时,但最后还是在meta_value和指定行之间发生了冲突。非常感谢。

我的代码如下:

add_action("admin_init", "users_meta_init");
function users_meta_init(){
    add_meta_box("users-meta", "Assign customers to this product", "users", "product", "normal", "high");
}

function users(){

    global $post;
    $custom = get_post_custom($post->ID);
    $user_args  = array(
        'role' => 'customer',
        'orderby' => 'display_name'
       );

    $wp_user_query = new WP_User_Query($user_args);
    $authors = $wp_user_query->get_results();

    if (!empty($authors)) {
        foreach ($authors as $author) {
            $author_info = get_userdata($author->ID);
            $author_id = get_post_meta($post->ID, 'users', $author_info->ID);

            echo " <input type='checkbox' name='users' value='$author_info->ID'> $author_info->first_name $author_info->last_name<br/> ";
        }
    }
}

add_action('save_post', 'save_userlist');

function save_userlist($author_id){

    global $wpdb;
    global $post;

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return $post->ID;
        return $author_info->ID;
    }
    $table_name = $wpdb->prefix . "assigned_products";

    $wpdb->insert($table_name, array(
                      'post_id'    => $post->ID,
                      'meta_key'  => "customer",
                      'meta_value'  => $_POST["users"],
                      'assigned'  => "yes",
                      )
                  );
}

1 个答案:

答案 0 :(得分:2)

我不是任何想象力的WP专家,但在这段代码中有一些明显的woopsees。

这不行,只有第一次返回才有效,我很惊讶你没有得到关于无法访问代码的编译器警告?这让我觉得你没有看错误日志!

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return $post->ID;
    return $author_info->ID;
}

同样在该函数的范围内,无论如何都没有$author_info对象返回$author_info->ID

这个IF看起来有些偏差!

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {

如果DOING_AUTOSAVE被定义为&& DOING_AUTOSAVE应该测试的是什么,你的意思是

if (defined('DOING_AUTOSAVE') && $something == DOING_AUTOSAVE) {

最后,设置复选框以进行检查的方法是添加属性checked="checked"属性列表

echo " <input checked="checked" type='checkbox' name='users' value='$author_info->ID'> $author_info->first_name $author_info->last_name<br/> ";

但我认为你只想这样做,如果某事= =某事,那就是我缺乏WP知识意味着我无法看到你可能正在测试或反对的内容。