Wordpress post filter menu

时间:2017-02-14 作者:snookian

嗨,我正在尝试创建一个表单,通过3个要求、类别、作者和日期过滤我的帖子。用户应该能够从每个下拉列表中选择一个需求(或全部留空),并基于此获得一个outcoem,例如,可以选择HMTL(来自类别)、Joe Bloggs(来自作者)和2017年2月(来自日期),并获得一个页面,该页面显示2017年2月发布的Joe Bloggs编写的HTMl中的所有帖子。

到目前为止,我有一些功能和一个表单,当选择类别和作者(无日期)时,它似乎起作用,并将我引导到新闻/类别/新闻/?用户=1(&A);日期dd&;提交=筛选,显示我想要的内容。

然而,问题开始的日期。如果我选择了与前一个相同的类别和作者,但选择了2017年1月,我会得到URL新闻/类别/新闻/?用户=1(&A);日期dd=http%3A%2F%2localhost%2Fbrandbiology%2Fnews%2F2017%2F01%2F&;submit=filter现在不起作用,它将显示类别和作者,但没有日期和奇怪的url。

第二,如果我把<?php wp_get_archives( $args ); ?> 在我的页面上,它将显示<li> (不是我想要的,但我这样做是为了测试)然后点击2017年1月,它将带我到2017年1月的《新闻》(news/2017/01)/《新闻》(Post),它将只在1月显示帖子(不适用于分类IE,新闻/分类/博客/2017/01)/《新闻》(shows 404)。

因此,我的问题是试图创建正确的结果,根据我想要的3个要求显示帖子。

提前感谢

Here is my Functions:

function get_cat_droplist(){
    $args = array(
        \'show_option_all\'    => \'All Categories\',
        \'show_option_none\'   => \'\',
        \'option_none_value\'  => \'-1\',
        \'orderby\'            => \'ID\',
        \'order\'              => \'ASC\',
        \'show_count\'         => 1,
        \'hide_empty\'         => 1,
        \'child_of\'           => 0,
        \'exclude\'            => \'\',
        \'include\'            => \'\',
        \'echo\'               => 1,
        \'selected\'           => 0,
        \'hierarchical\'       => 0,
        \'name\'               => \'cat\',
        \'id\'                 => \'\',
        \'class\'              => \'postform\',
        \'depth\'              => 0,
        \'tab_index\'          => 0,
        \'taxonomy\'           => \'category\',
        \'hide_if_empty\'      => true,
        \'value_field\'        => \'term_id\',
    ); 
    $output = wp_dropdown_categories( $args );
}
function get_author_droplist(){
    $args = array(
        \'show_option_all\'         => \'All Author\', // string
        \'show_option_none\'        => null, // string
        \'hide_if_only_one_author\' => true, // string
        \'orderby\'                 => \'display_name\',
        \'order\'                   => \'ASC\',
        \'include\'                 => null, // string
        \'exclude\'                 => null, // string
        \'multi\'                   => false,
        \'show\'                    => \'display_name\',
        \'echo\'                    => true,
        \'selected\'                => false,
        \'include_selected\'        => false,
        \'name\'                    => \'user\', // string
        \'id\'                      => null, // integer
        \'class\'                   => null, // string 
        \'blog_id\'                 => $GLOBALS[\'blog_id\'],
        \'who\'                     => null // string
    );
    $output = wp_dropdown_users( $args );
}
function get_date_droplist(){
  $args = array(
      \'type\'            => \'monthly\',
      \'limit\'           => \'\',
      \'format\'          => \'option\', 
      \'before\'          => \'\',
      \'after\'           => \'\',
      \'show_post_count\' => true,
      \'echo\'            => 0,
      \'order\'           => \'DESC\',
      \'post_type\'       => \'post\'
  );
  $output = wp_get_archives( $args );
}

and my HTML/PHP

    <form action="<?php bloginfo(\'url\'); ?>" method="get">
        <div>
          <span class="cat-list-header text-color-1">Filter posts:</span>
            <?php
              $select = get_cat_droplist();
              echo $select;
            ?>

            <?php
              $select = get_author_droplist();
              echo $select;
            ?>

            <select name="date-dd">
              <option value=""><?php echo esc_attr( __( \'Select Month\' ) ); ?></option> 
              <?php wp_get_archives( array( \'type\' => \'monthly\', \'format\' => \'option\', \'show_post_count\' => 1 ) ); ?>
            </select>

            <input type="submit" name="submit" value="filter" /> <!--CHANGE VALUE TO YOUR LIKING!-->
        </div>
    </form>

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

1- 要获取作者列表,可以使用:

<?php wp_list_authors( ); ?>

这将返回作者列表及其帐户和帖子的链接。要使用所需的参数对其进行自定义,请查看Codex

2- 要检索类别,请使用:

<?php wp_list_categories(); ?>

此函数将以HTML列表的形式返回所有类别的列表。您也可以自定义它,here.

3- 最后,要按日期筛选帖子,您可以使用您提供的链接中建议的方法,方法是:

<?php wp_get_archives(); ?> 并将参数设置为每月或每年。导游解释得很好。

Note: 您不需要使用<options> 选择器创建下拉菜单。这些函数将以HTML列表的形式返回结果,因此您可以将其设置为下拉菜单的样式。可以找到有关CSS下拉列表的完整指南here.

如果您需要关于其中任何一个的更多详细信息,请告诉我。