我试图在自定义字段保存到db之前对其执行一些检查。所以我决定在浏览器和db之间使用add\\u过滤器。这是我的密码
function fields_pre_check($post_id){
$errors = false;
$values = get_post_custom(get_the_ID());
$act_val = $_POST[\'checks_news\'];
。。。altri检查。。。
if(get_check_key($post_id, $act_val , $values)){
$errors = true;
update_option(\'custom_token\', $errors);
update_option(\'custom_admin_errors\', $txt_err=error_text($errors, 2));
remove_action(\'save_post\',\'update_fields\');
wp_update_post(array(\'ID\' => get_the_ID(), \'post_status\' => \'draft\'));
add_action(\'save_post\', \'update_fields\');
return false;
}
}
function update_fields($post_id){
$chk1 = $_POST[\'checks_news\'];
update_post_meta($post_id, \'checks_news\', $chk1);
}
function get_check_key($post, $checker, $val){
global $wpdb;
$wpdb->query("SELECT meta_value, meta_key
FROM $wpdb->wp_postmeta
WHERE meta_value = $checker");
if(get_post(get_the_ID())==NULL){
return ($wpdb->num_rows != 0);
}
else{
if($val[\'checks_news\'][0] == $checker)
return false;
else{
return ($wpdb->num_rows != 0);
}
}
}
add_filter(\'wp_insert_post_data\', \'fields_pre_check\');
add_action(\'save_post\', \'update_fields\');
我选择add\\u filter是因为函数get\\u check\\u key必须使用新的$checker来验证以前的值$val[\'checks\\u news\'][0](如果我使用我尝试过的add\\u操作,它们是相同的,因为$val[\'checks\\u news]][0]检索刚刚保存的值,所以如果要将该值从1更改为2并执行检查,它将返回2==2)。当我想使用$wpdb->num\\u行时,问题就出现了,即使结果应该是1,它也总是返回0。我做错了什么?我使用add\\u filter而不是add\\u操作的方法是否正确?