Php Wordpress:wpdb准备有条件

Php Wordpress:wpdb准备有条件,php,wordpress,Php,Wordpress,我试图使用sql->prepare和许多字符串连接 在下面的代码中,我尝试调用一个函数,该函数将从$wpdb->prepare返回一个get\u post数组 function test($array){ $sqlprep = "SELECT SQL_CALC_FOUND_ROWS p.ID FROM {$wpdb->prefix}posts p LEFT JOIN {$wpdb->prefix}postmeta m ON m.post_

我试图使用
sql->prepare
和许多字符串连接

在下面的代码中,我尝试调用一个函数,该函数将从
$wpdb->prepare
返回一个
get\u post
数组

function test($array){
    $sqlprep = "SELECT SQL_CALC_FOUND_ROWS  p.ID 
        FROM {$wpdb->prefix}posts  p
        LEFT JOIN {$wpdb->prefix}postmeta m ON m.post_id = p.ID
        LEFT JOIN {$wpdb->prefix}term_relationships r ON (p.ID = r.object_id)  
        LEFT JOIN {$wpdb->prefix}term_relationships r1 ON (p.ID = r1.object_id) 
        LEFT JOIN {$wpdb->prefix}term_relationships r2 ON (p.ID = r2.object_id) 
        LEFT JOIN {$wpdb->prefix}term_taxonomy tt ON tt.term_taxonomy_id = r.term_taxonomy_id
        LEFT JOIN {$wpdb->prefix}terms t ON t.term_id = tt.term_id AND t.term_id = r.term_taxonomy_id
        WHERE 1=1";

    if(isset($array['post_type']) && !empty($array['post_type']){
        $sqlprep .= " AND p.post_type = '".$array['post_type']."'";
    }
    if(isset($array['post_type']) && !empty($array['post_type']){
        $sqlprep .= " AND p.post_type = '".$array['post_status']."'";
    }

    $sql = $wpdb->prepare($sqlprep);
    $ids = $wpdb->get_col($sql);
    return array_map('get_post', $ids)
}
该值是一个数组,它是:

$args=array(
    'post_type' => 'post',
    'post_status' => 'published',
);
当我试图
打印($sql)
以获取查询时,它总是停止,直到
其中1=1


字符串连接能否用于
wpdb prepare

请注意$wpdb对象中属性的使用和prepare方法的使用,此外,post\u状态的列名存在问题:

function test($array){
    $sql = "SELECT SQL_CALC_FOUND_ROWS  p.ID 
        FROM {$wpdb->posts}  p
        LEFT JOIN {$wpdb->postmeta} m ON m.post_id = p.ID
        LEFT JOIN {$wpdb->term_relationships} r ON (p.ID = r.object_id)  
        LEFT JOIN {$wpdb->term_relationships} r1 ON (p.ID = r1.object_id) 
        LEFT JOIN {$wpdb->term_relationships} r2 ON (p.ID = r2.object_id) 
        LEFT JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id = r.term_taxonomy_id
        LEFT JOIN {$wpdb->terms} t ON t.term_id = tt.term_id AND t.term_id = r.term_taxonomy_id
        WHERE 1=1";

    if(isset($array['post_type']) && !empty($array['post_type']){
        $sql .= $wpdb->prepare(" AND p.post_type = %s", $array['post_type']);
    }
    if(isset($array['post_type']) && !empty($array['post_type']){
        $sql .= $wpdb->prepare(" AND p.post_status = %s", $array['post_status']);
    }

    $ids = $wpdb->get_col($sql);
    return array_map('get_post', $ids)
}

可以将连接与准备一起使用。你是否应该是一个不同的问题!在您的代码中,每个if语句中都缺少一个右括号;在return语句中加一个分号。我很惊讶你没有发现任何错误。在这种情况下,你能选择正确的答案吗?