2

我有一个 $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

4 回答 4

3

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

为了查找“事件”的 post_type,您需要使用该register_post_type函数注册此自定义帖子类型。

以下是如何创建名为“事件”的自定义帖子类型的示例

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_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是您可以调用 haha​​ 的函数的自定义名称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 参数。:)

干杯

于 2012-07-03T20:37:28.613 回答
1

尝试使用 post_type like %event%

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

于 2012-06-29T18:16:03.007 回答
1

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

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

于 2012-07-01T18:10:38.720 回答
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
"); 

或者

$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);
于 2012-07-01T09:26:32.800 回答