Wordpress - 仅从“已发表”的文章中获取元数据

时间:2014-06-27 11:57:52

标签: php wordpress loops metadata

我有来自帖子的元数据下拉列表:

<form name="search" action="" method="get" class="form-dropdown">
        <select name="city">
        <option>Stadt wählen</option>
        <?php
            $metakey = 'city';
            $counties = $wpdb->query( 
                $wpdb->prepare( 
                    "
                    SELECT DISTINCT     meta_value
                    FROM                $wpdb->postmeta AS pm
                    JOIN                $wpdb->post AS p ON pm.post_id = p.ID
                    WHERE               meta_key = %s
                    AND                 post_status = 'published'
                    ORDER BY            meta_value ASC
                    ",
                    $metakey
                )
            );


            if ($counties) {
            foreach ($counties as $city) {
            echo "<option value=\"" . $city . "\">" . $city . "</option>";

            }
        }
        ?>
        </select>
        <input type="submit" value="Anzeigen" />
    </form>

但是

AND post_status = published

这里好像错了。任何想法如何只显示已发布帖子的元数据?我通过插件&#34; FeedWordPress&#34;获得每个RSS提要的帖子。他把旧帖发布到帖子状态&#34;退休&#34;所以他们被展示了。不,我发现插件中没有任何选项可以将它们放入垃圾箱......

1 个答案:

答案 0 :(得分:0)

您只是在查询中缺少单引号,因为published是字符串值而不是另一列。啊,正如@Khushboo刚刚提到的,post_status确实是posts表的一列。所以它必须看起来像这样:

$wpdb->query( 
    $wpdb->prepare( 
        "
        SELECT DISTINCT     meta_value
        FROM                $wpdb->postmeta AS pm
        JOIN                $wpdb->post AS p ON pm.post_id = p.ID
        WHERE               meta_key = %s
        AND                 post_status = 'publish'
        ORDER BY            meta_value ASC
        ",
        $metakey
    )
);

但为什么不使用query_posts和查询参数等其他查询函数?