Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Wordpress-仅从“获取元数据”;出版;文章_Php_Wordpress_Loops_Metadata - Fatal编程技术网

Php Wordpress-仅从“获取元数据”;出版;文章

Php Wordpress-仅从“获取元数据”;出版;文章,php,wordpress,loops,metadata,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 = $wpd

我有一个帖子中的元数据下拉列表:

<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>

这似乎是错的。你知道如何只显示已发布帖子中的元数据吗?我通过插件“FeedWordPress”获得每个RSS提要的帖子,他将旧帖子设置为帖子状态“retired”,这样它们就会显示出来。不,我在插件中找不到将它们放入垃圾箱的选项…

您的查询中缺少单引号,因为
发布的
是一个字符串值,而不是另一列。啊,正如@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和query params?

post_status不是postETA表中的字段。您必须使用posts表创建join查询我认为您是对的,但我不知道如何实现这一点。之前?不,那不行,我想Khushboo是对的,我必须先从帖子中获取标签,然后在获取元数据之前按“帖子状态”进行过滤。对。刚刚看到了,已经在更新我的帖子了。现在应该可以了。用你的代码更新了我的帖子现在我没有收到任何错误,但是下拉列表是空的…实际上状态是
publish
not
published
(请参见我的更改)。你是否尝试过运行PhpMyAdmin或类似的查询?对我来说,这很有效。你确定你的元键是“城市”并且你有活动的行来发布文章吗?
$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
    )
);