我有一个$ 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'
部分。当我离开查询时,它返回结果很好
任何人都知道为什么?
谢谢!
答案 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)
我遇到的问题来自新线。由于某种原因,编辑器或数据库配置错误,因为它从未发生在我身上。
一旦我将查询更改为在同一行上,它就开始工作了。