$wpdb->num_rows doesn't work

时间:2012-02-24 作者:Tony

我试图在自定义字段保存到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操作的方法是否正确?

1 个回复
SO网友:Neil Davidson

我要做/添加/更改的几件事:

我将使用$wpdb->get\\u results,而不是直接使用查询函数

其次,$wpdb->num\\u行现在可以工作了。

第三:setup\\u postdata()是在循环外实际使用查询所需的。这意味着get\\u post(get\\u the\\u ID())不适用于任何内容,因为没有可引用的现有$post ID。

我理解您正在尝试做什么,但您还需要几行代码才能正确完成。对于还没有准备好编写它的人来说,这似乎是一个有点高级的功能。

换句话说,在wpdb和/或wordpress类函数中有效使用对象、数组和变量之前,需要确保对象、数组和变量已正确设置。

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);