如何在带有for循环的选择列表中保留所选选项?

时间:2016-06-29 15:02:41

标签: php wordpress for-loop

我使用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>。 “全部”价值也必须保留。

BTW有人可以解释一下$_POST对我的需要吗?我认为这个应用程序不需要<form>…</form>

该应用可在http://elanonimo.dp.ua/找到。请忽略绿色下拉按钮。 (完整的WP主题源代码位于http://www.filedropper.com/package1467207510

3 个答案:

答案 0 :(得分:0)

添加“全部”值以允许选择所有国家/地区:全部。 只需添加初始化声明:

$myquery = new WP_Query();
if ($myquery -> have_posts()) {
  $arr = ['All']; // statement added
  while ($myquery -> have_posts()) {

答案 1 :(得分:0)

  BTW有没有人可以在这里解释一下$ _POST的需求呢?我认为这个应用程序不需要<form>…</form>

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

$_POST['countries']将在php中初始化。传统的方法是在form中添加一个国家/地区字段,并使用方法=&#34;发布&#34;提交按钮。但是,在您的页面中,输入按钮不是表单,但它可以工作。这意味着某处有一些javascript将click事件处理程序(执行get请求)附加到input

但是,在您的页面中,没有<form>。某个地方有一个javascript将事件附加到输入按钮。它使用POST,而不是GET。它还会在http://elanonimo.dp.ua/?num=off&country=%D0%98%D1%82%D0%B0%D0%BB%D0%B8%D1%8F&price=网址上发布一个国家/地区。 如果你想在php中使用那个国家,你应该使用$_GET['country']

如果$_GET['country']不起作用,则可能存在编码问题。请使用标准的ASCII国家/地区名称进行尝试。

答案 2 :(得分:0)

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