$ wpdb-> get_results问题

时间:2012-05-05 23:33:02

标签: mysql wordpress

我有一个$ wpdb-> get_results查询,如下所示:

"SELECT *
 FROM $wpdb->posts
 WHERE post_author = $current_user_id
   AND post_status = 'publish'
   AND post_type = 'event'
 ORDER BY post_date DESC"

它转换为:

SELECT *
FROM wp_posts
WHERE post_author = 5
  AND post_status = 'publish'
  AND post_type = 'event'
ORDER BY post_date DESC

如果我通过phpmyadmin在数据库中运行那个确切的查询,它会很好地返回结果。然而,在wordpress实现中它不会返回任何内容。 我把它缩小到似乎打破它的AND post_type = 'event'部分。当我离开查询时,它返回结果很好

任何人都知道为什么?

谢谢!

4 个答案:

答案 0 :(得分:3)

根据我的理解,wordpress有5种主要帖子类型:(帖子,页面,附件,修订版和nav_menu_item)

要查找'event'的post_type,您需要使用register_post_type函数注册此自定义帖子类型。

以下是如何创建名为“event”

的自定义帖子类型的示例
add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'event',
        array(
            'labels' => array('name' => __( 'events' ),
                    'singular_name' => __( 'event' )),
            'public' => true,
        )
    );
}

注意:register_post_type($post_type, $args)默认采用2个参数。

$post_type - 是您的自定义帖子类型的名称。

$args - 是修改帖子类型默认行为的任意数量的参数。这通常应该是一个数组。

'labels'参数以一般和单数形式描述帖子类型的名称。如果您希望使用post类型的常规和单数版本,请使用显示的方法。否则,默认值只是您提供的$post_type name名称。

'public'参数说明帖子类型是否供公众使用。

您还可以编写一个没有多个标签的简化版本,例如:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'event', array( 'public' => true, 'label' => 'events' ) );
}

另请注意,create_post_type是您可以调用my_super_cool_new_custom_original_post_type_creating_function哈哈的函数的自定义名称或描述符合您需求的内容。

在简化版中,我使用了label,它接受​​一个参数,这是帖子类型的通用名称。如果您想为帖子类型添加说明,可以在名称的括号内填写,并替换x的下划线,例如:

add_action( 'init', 'create_post_type' );
register_post_type( 'event',
    array(
        'labels' => array('name' => _x( 'events' , 'post type general name' ),
                'singular_name' => _x( 'event' , 'post type singular name' )),
        'public' => true,
    )
);

提醒:在初始化之前不要使用register_post_type

现在,如果您已完成所有这些并且无法访问post_type,请确保已向其添加了public参数。 :)

欢呼声

答案 1 :(得分:1)

尝试使用post_type like %event%

您可以通过WP_Query query_posts执行相同的操作,这不是一个复杂的查询,您需要使用$ wpdb,但我可能错了。

答案 2 :(得分:1)

尝试以下代码:

$get_post = $wpdb->query("SELECT * FROM wp_posts
WHERE post_author = ".$current_user_id."
  AND post_status = 'publish'
  AND post_type = 'event'
ORDER BY post_date DESC
"); 

OR

$wpdb->get_results("SELECT *
 FROM $wpdb->posts
 WHERE post_author = $current_user_id
   AND post_status = 'publish'
   AND post_type = 'event'
 ORDER BY post_date DESC", OBJECT);

答案 3 :(得分:1)

我遇到的问题来自新线。由于某种原因,编辑器或数据库配置错误,因为它从未发生在我身上。

一旦我将查询更改为在同一行上,它就开始工作了。