更改网页网址并根据$ _POST值

时间:2017-03-16 00:27:12

标签: php forms redirect post

我有一个WordPress网站,每个页面都有header.php。在header.php上,我有一个表单,用户可以在其中选择产品类别。在更改时,表单会将用户重定向到我的类别页面,该页面在我的服务器上为category.php,但在浏览网站时显示为/ category。

关于header.php

<form method="POST" action="category" id="cateogry-filter-pick">
    <select class="selectpicker" id="category-filter" name="cat">
        <?php 
        $category_list = $wpdb->get_results("SELECT DISTINCT product_category FROM $table_name;");
        foreach($category_list as $key => $row): ?>
            <option value="<?php echo str_replace(' ', '-', $row->product_category);?>"><?php echo $row->product_category;?></option>
        <?php endforeach; ?>
    </select>
</form>
Custom-js.js

上的

$(function(){
    $('#category-filter').on('change', function() {
        this.form.submit();
    }); 
});

在category.php 上,我可以将类别设置为变量,然后循环显示我的所有结果,使用:

$product_category = isset($_POST['cat']) ? $_POST['cat'] : null;

在我的类别页面上,我还使用了一些带有AJAX / $ _GET的排序过滤器,它会将URL更改为以下内容:

/category/?sort=rating

执行此操作时,我会丢失之前任何$_POST发送的类别的值。

我最终想要做的是将我的网页网址从/category更改为/the-name-of-the-category/$_POST['cat']),并在使用排序过滤器时保留此值。我的网址将变为:

www.mywebsite.com/shoes/?sort=rating

这样做的最佳方法是什么,考虑到我还希望在浏览器中键入URL的用户(例如www.mywebsite.com/shoes)访问同一页面。

1 个答案:

答案 0 :(得分:0)

(抱歉英语不好)

当您提交表单(提交按钮或javascript)时,它会重定向到表单的操作(action="category"):

url: www.mywebsite.com/category

如果您想重定向到www.mywebsite.com/your-category,则必须在 category.php 中执行此操作:

$product_category = isset($_POST['cat']) ? $_POST['cat'] : null;

if($product_category)
{
    $url = "www.mywebsite.com/".$product_category;
}

如果您想保留?sort=rating或其他$_GET vars而不丢失以前的类别,则必须在 category.php 中附加到您的网址:

$url = "www.mywebsite.com/".$product_category."/?".$my_get_vars;

其中$my_get_vars包含您之前网址的查询部分

但是,如果您的过滤器(查询变量)来自ajax调用,则必须将您的ajax请求发送到当前网址:www.mywebsite.com/selected-category而不是www.mywebsite.com/category.php以保留您选择的类别。

希望这有帮助!