首先,您不应该像很多人已经提到的那样修改核心表。您可以像这样使用两个表中的连接进行选择:
$querystr = "
SELECT $wpdb->posts.*
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'tag'
AND $wpdb->postmeta.meta_value = 'email'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()
ORDER BY $wpdb->posts.post_date DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
更多信息在这里:http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query
除此之外,您的问题到底是什么?要显示自定义复选框,您可以使用 add_meta_box 函数。要更新它,您需要将函数添加到 wp_insert_post_data 挂钩,然后将数据插入数据库,如下所示:
add_filter('wp_insert_post_data', 'so27747402_save_data');
function so27747402_save_data($post_san){
global $wpdb;
global $post;
$checkbox = (isset($_POST['so27747402_checkbox']) && $_POST['so27747402_checkbox'] == 1);
update_post_meta($post->ID, '_so27747402_checkbox', $checkbox);
return $post_san;
}
或者如果你坚持通过更改核心表来做到这一点:
add_filter('wp_insert_post_data', 'so27747402_save_data');
function so27747402_save_data($post_san){
global $wpdb;
global $post;
$checkbox = (isset($_POST['so27747402_checkbox']) && $_POST['so27747402_checkbox'] == 1);
$wpdb->query("UPDATE $wpdb->posts SET checkbox = $checkbox WHERE ID = $post->ID");
return $post_san;
}
但是,是的,这是一种非常糟糕的方式。你应该改用update_post_meta。