如何将选定选项保留在选择列表中的选择列表中



我使用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()) {

顺便说一句,有人可以在这里解释需要$ _的需求吗?我不相信此应用需要<form>…</form>

如果服务器从浏览器接收HTTP POST请求,则

$_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国家名称尝试。

最新更新