通过获取URL参数进行发布过滤

时间:2020-06-07 作者:Thomas

我正试图通过在URL中设置参数来为我的wordpress站点中的帖子添加一个简单的过滤器,但是它根本没有过滤帖子,这让我抓狂。所有的教程或论坛都不会显示如果URL没有过滤你的帖子会发生什么。

我的帖子有我想学习过滤的类别(测试、windows和Wordpress),例如,每个类别类型都有复选框。但是,当URL设置为/站点/?orderby=日期(&M);订单=描述(&D);类别%5B%5D=windows是否未更改显示的任何内容?

如果有人能帮我理解为什么不过滤帖子,我会很感激的。

我的代码:

    <form method="GET">

    <select name="orderby" id="orderby">
        <option
                value="date"
            <?php echo selected($_GET[\'orderby\'], \'date\'); ?>
        >
            Newest to Oldest
        </option>
        <option
                value="title"
            <?php echo selected($_GET[\'orderby\'], \'title\'); ?>
        >
            Alphabetical
        </option>
    </select>

    <input
            id="order"
            type="hidden"
            name="order"
            value="<?php echo (isset($_GET[\'order\']) && $_GET[\'order\'] == \'ASC\') ? \'ASC\' : \'DESC\'; ?>"
    />


    <?php

    $terms = get_terms([
        \'taxonomy\' => \'category\',
        \'hide_empty\' => false
    ]);

    foreach ($terms as $term) :

        ?>

        <label>

            <input
                    type="checkbox"
                    name="category[]"
                    value="<?php echo $term->slug; ?>"
                <?php checked(
                    (isset($_GET[\'category\']) && in_array($term->slug, $_GET[\'category\']))
                ) ?>
            />

            <?php echo $term->name; ?>

        </label>

    <?php endforeach; ?>


    <button type="submit">Apply</button>

</form>

<div class="wrapper">

    <?php
    $arg = array(
        \'type\' => \'post\',
        \'order\' => \'ASC\'
    );
    $blog_posts = new WP_Query( $arg );

    if ($blog_posts->have_posts()) :

        while( $blog_posts->have_posts() ) : $blog_posts->the_post();

            echo the_title();
            echo "<br>";

        endwhile;

    endif;
    ?>

</div>

1 个回复
SO网友:Botond Vajna

您必须过滤查询参数中的帖子。

尝试:

$mycat = $_GET[\'category\'];

$arg = array(
        \'type\' => \'post\',
        \'order\' => \'ASC\',
        \'category_name\' => $mycat
    );
只需从链接中删除方括号,或使用:$mycat[0]

$mycat = $_GET[\'category\'];

$arg = array(
        \'type\' => \'post\',
        \'order\' => \'ASC\',
        \'category_name\' => $mycat[0]
    );