wpdb print all post meta

时间:2018-02-01 作者:Muhammad Ibrahim

我创建查询以从元键输出所有元值select_analyst 但如果我把或包括两个post_status 这是印在预计之后的。你能告诉我我做错了什么吗?

如果我只放了一个职位状态,那就是工作,但我需要另一个post_status.

我的查询:

$query = $wpdb->prepare(\'
    SELECT DISTINCT pm.meta_value FROM %1$s pm
    LEFT JOIN %2$s p ON p.ID = pm.post_id
    WHERE pm.meta_key = "%3$s" 
    AND p.post_status = "%4$s"
    OR p.post_status = "%5$s"
    AND p.post_type = "%6$s"
    ORDER BY "%3$s"\',
    $wpdb->postmeta,
    $wpdb->posts,
    \'select_analyst\', 
    \'new\',
    \'pending_review\',          
    $post_type
);

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这不是一个真正的WordPress问题,因为它只是标准SQL,所以它不属于这里,但我有一些关于您使用$wpdb->prepare() 所以我会回答这个问题。

那么,让我们看看你的WHERE 子句,单独,替换值,缩进以反映其解释方式:

WHERE 
    pm.meta_key = "select_analyst" AND p.post_status = "new" OR 
    p.post_status = "pending_review" AND p.post_type = "post_type"
这又回来了meta_value 对于满足以下条件的行:

  • meta_keyselect_analyst post_statusnew
  • post_statuspending_reviewpost_type 是您的帖子类型meta_values 对于所有pending_review.

    您需要设置条件的格式,以便查询:

    • meta_keyselect_analyst
    • post_type 是您的帖子类型post_statusnew pending_review
    这方面的SQL是

    WHERE
        pm.meta_key = \'select_analyst\' AND 
        p.post_type = \'post_type\' AND
        p.post_status IN (\'new\', \'pending_review\' )
    
    因此,您的完整查询应该是:

    $query = $wpdb->get_results(
        "SELECT 
            DISTINCT pm.meta_value 
        FROM 
            $wpdb->postmeta pm
        LEFT JOIN 
            $wpdb->posts p ON p.ID = pm.post_id
        WHERE 
            pm.meta_key = \'select_analyst\' AND
            p.post_type = $post_type AND
            p.post_status IN (\'new\', \'pending_review\')
        ORDER BY
            pm.meta_value"
    );
    
    我还做了一些其他更改:

    你不需要准备这份声明。查询中没有不安全的用户输入。您希望这样做的唯一原因是不必多次将键写出来,但如果变量不是来自不安全的输入,则始终可以直接将其放入语句中。您甚至没有多次使用任何变量(除了元键,请参见下文),因此这对于您的查询来说是不必要的

  • 您是按文本值排序的\'select_analyst\', 这没什么用。我假设您想按元值排序,所以我这样做了
还要注意,缩进代码以反映查询的结构可以更容易地发现这些问题。

结束

相关推荐

使用Conatct Form 7的jQuery验证引擎

我使用的是联系表7,它正在进行基本验证。但我必须做一些高级验证。所以我必须使用https://github.com/posabsolute/jQuery-Validation-Engine.如何将vaidation engine与Contact form 7一起使用?