我已经在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",
)
);
}
答案 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知识意味着我无法看到你可能正在测试或反对的内容。