【问题标题】:Filtering the output with checkboxes in WordPress在 WordPress 中使用复选框过滤输出
【发布时间】:2014-01-11 11:53:12
【问题描述】:

我正在 WordPress 中构建一个带有过滤功能的页面。基本上,当您单击复选框时,我想更改数据的输出。我现在拥有的:

    <form class="compo-filter">
    <input type="checkbox" name="compo-cat" value="indoor" onclick="if(this.checked){this.form.submit();}" />Indoor
    <input type="checkbox" name="compo-cat" value="outdoor" onclick="if(this.checked){this.form.submit();}" />Outdoor
    <input type="checkbox" name="compo-cat" value="men" onclick="if(this.checked){this.form.submit();}" />Men
    <input type="checkbox" name="compo-cat" value="women" onclick="if(this.checked){this.form.submit();}" />Women 
    <input type="checkbox" name="order" value="order" onclick="if(this.checked){this.form.submit();}" />Show only competitions currently in progress
</form>

<?php 
    $today = date('Y-m-d');
    $args = array(
        'post_type' => 'competitions',
        'posts_per_page' => 10,
        'meta_key' => 'startdate',
        'meta_compare' => '>=',
        'meta_value' => $today,
        'orderby' => 'startdate',
        'order' => 'ASC'
    );
    $args2 = array(
        'post_type' => 'competitions',
        'posts_per_page' => 10,
        'meta_key' => 'startdate',
        'orderby' => 'startdate',
        'order' => 'ASC'
        );

    if ($_POST['order'] == 'order') {   
        $query = new WP_Query($args2);
    } else {
        $query = new WP_Query($args);
    }   

    if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>

但上述解决方案不起作用,我无法弄清楚出了什么问题。页面重新加载,URL 显示选定的值/?order=order

【问题讨论】:

    标签: php jquery wordpress filter


    【解决方案1】:

    我认为问题出在表单方法上,您在代码中使用了$_POST,但是通过将特定的表单method = "post" 放在$_POST 方法中,您可以使其工作。

    默认情况下,没有method 属性,它会在提交表单时将您带到get 方法。

    【讨论】:

      【解决方案2】:

      解决了我自己的问题。需要使用 $_GET 而不是 $_POST。

      【讨论】:

      • 感谢您发布您的答案,希望对未来的人们有所帮助。供您参考,如果您想使用 $_POST(这通常更可取,因为用户看不到丑陋的查询字符串),您可以将行 &lt;form class="compo-filter"&gt; 更改为 &lt;form class="compo-filter" method="POST"&gt;
      • 谢谢,这个解决方案确实更好,因为我不希望字符串公开可见。
      • 好消息。另一种相当常见的技术是将表单发布到执行所需工作的处理程序(不可见页面),然后将用户重定向到相关页面。例如,如果您正在更新帖子,这将特别有用。这样做的主要原因是安全性,所以如果您不进行任何数据库写入或类似操作,它可能不适用,但希望将来能很好地了解...
      【解决方案3】:

      我认为问题出在表单方法上,您在代码中使用了$_POST,但是通过将特定的表单method = "post" 放在$_POST 方法中,您可以使其工作。

      默认情况下,没有方法属性,它会在提交表单时将您带到 get 方法。

      解决了我自己的问题。需要使用$_GET 而不是$_POST

      【讨论】:

        猜你喜欢
        • 2012-09-08
        • 2014-12-20
        • 2016-06-14
        • 2012-02-06
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        相关资源
        最近更新 更多