我使用ACF WordPress插件创建了一个国家的列表。该插件允许创建自定义邮政字段,因此每个帖子都有一个额外的元数据,即国家名称。
我获得了带有wp_query的国家列表,然后将其存储在$result
变量中:
$myquery = new WP_Query($myargs);
if ($myquery -> have_posts()) :
while ($myquery -> have_posts()) :
$myquery -> the_post();
array_push($arr, get_field('country'));
endwhile;
endif;
wp_reset_postdata();
$result = array_unique($arr);
我现在需要的是选择一个国家,然后在搜索该国元元素域返回的帖子时将其保留。(右侧的蓝色按钮。)
我该怎么做?到目前为止,我已经尝试过:
<select name="countries" id="countries" class="form-control">
<?php
for ($i = 0; $i < count($result); $i++) :
$selected = (isset($_POST['countries']) && $result[$i] == $_POST['countries']) ? 'selected' : '';
$selected = ($result[$i] == @$_POST['countries']) ? 'selected' : '';
echo '<option value="' . $result[$i] . '" ' . $selected . '>' . $result[$i] . '</option>';
endfor;
?>
</select>
不会保留选定的国家。
也不会<?php
$selected = (isset($_GET['country']) && $result[$i] == $_GET['country']) ? 'selected="selected"': '';
?>
最重要的是,我需要添加"全"值以选择所有国家/地区:<option value="all">all</option>
。"全"价值也必须保留。
顺便说一句,有人可以在这里解释$_POST
的需求吗?我不相信此应用需要<form>…</form>
。
可以在http://elanonimo.dp.ua/上找到该应用程序,请忽略绿色下拉订单按钮。(完整的WP主题源代码在http://www.filedropper.com/package1467207510)
array_unique($arr)
不会重新索引数组的键,因此for ($i = 0; $i < count($result); $i++)
循环不起作用。您可以
$result = array_values(array_unique($arr));
或
foreach ($result as $country) {
$selected = (isset($_GET['countries']) && $country == $_GET['countries']) ? ' selected' : '';
echo '<option value="' . $country . '"' . $selected . '>' . $country . '</option>', "n";
}
工作代码:http://phpfiddle.org/main/code/fuy5-6f3c
添加'所有'值以选择所有国家/地区:全部。只需添加初始化语句:
$myquery = new WP_Query();
if ($myquery -> have_posts()) {
$arr = ['All']; // statement added
while ($myquery -> have_posts()) {
如果服务器从浏览器接收HTTP POST请求,则顺便说一句,有人可以在这里解释需要$ _的需求吗?我不相信此应用需要
<form>…</form>
。
$_POST['countries']
将在PHP中初始化。传统的方法是将form
与您的A国家/地区的字段和带有方法=" post"的提交按钮。但是,在您的页面中,输入按钮没有形式,而是可行的。这意味着在某个地方有一些JavaScript将click
事件处理程序(可用于获取请求)附加到input
。
但是,在您的页面中,没有<form>
。在某个地方有一个将事件附加到输入按钮的地方。它使用帖子,而不是得到。它还发布了一个国家,正如我们从http://elanonimo.dp.ua/?num=off&country=%D0%98%D1%82%D0%B0%D0%BB%D0%B8%D1%8F&price=
URL中看到的那样。如果您想在PHP中使用该国家,则应使用$_GET['country']
如果$_GET['country']
不起作用,则可能存在编码问题。使用标准的ASCII国家名称尝试。