根据下拉列表中选择的类别获取帖子--AJAX方法

时间:2018-05-21 作者:The WP Intermediate

<div class="latest_video">
        <?php wp_dropdown_categories(); ?>
        <?php
        // the query
            $the_query = new WP_Query( array(
            \'post_type\' => \'post\',
            \'posts_per_page\' => 10,
            \'post_status\' => \'publish\',
            \'category_name\' => $_REQUEST[\'cat\']
            )  );
        ?>
        <?php if ( $the_query->have_posts() ) : ?>
            <!-- the loop -->
            <ul class="flex">
            <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
                <li class="thebox">
                    <div class="theimg"><?php the_post_thumbnail( \'large\') ?></div>
                    <div class="stext3">
                        <h4><?php $categories = get_the_category();
                        if ( ! empty( $categories ) ) {
                          echo \'<a class="themecolor" href="\' . esc_url( get_category_link( $categories[0]->term_id ) ) . \'">\'  . esc_html( $categories[0]->name ) . \'</a>\';
                        } ?></h4>
                        <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
                    </div>
                </li>
            <?php endwhile; ?>
            </ul>
            <!-- end of the loop -->
            <!-- <?php wp_reset_postdata(); ?> -->
        <?php endif; ?>
    </div>
现在,我不知道如何根据从下拉列表中选择的类别使其工作。有没有人能帮我把事情做得更远,或者指导我如何开始?

1 个回复
SO网友:Johansson

您可以稍微调整一下代码,使其正常工作。首先,您需要创建一个包含类别的表单。然后,将表单提交到同一页面,以将其应用于查询。

<div class="latest_video">

    <!-- We add a form that submits the request the the same page -->
    <form method="get">
        <?php wp_dropdown_categories( \'show_count=1&hierarchical=1\' ); ?>
        <input type="submit" name="submit" value="view" />
    </form>

    <?php
    // the query
        $the_query = new WP_Query( array(
        \'post_type\' => \'post\',
        \'posts_per_page\' => 10,
        \'post_status\' => \'publish\',
        \'category_name\' => $_GET[\'cat\']
        )  );
    ?>
    <?php if ( $the_query->have_posts() ) : ?>
        <!-- the loop -->
        <ul class="flex">
        <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <li class="thebox">
                <div class="theimg"><?php the_post_thumbnail( \'large\') ?></div>
                <div class="stext3">
                    <h4><?php $categories = get_the_category();
                    if ( ! empty( $categories ) ) {
                      echo \'<a class="themecolor" href="\' . esc_url( get_category_link( $categories[0]->term_id ) ) . \'">\'  . esc_html( $categories[0]->name ) . \'</a>\';
                    } ?></h4>
                    <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
                </div>
            </li>
        <?php endwhile; ?>
        </ul>
        <!-- end of the loop -->
        <!-- <?php wp_reset_postdata(); ?> -->
    <?php endif; ?>
</div>
现在,初始负载将包括WP_Query, 但一旦用户选择一个类别并提交表单,页面将重新加载WP_Query 将更新。确保不添加action ,因此它将被提交到当前页面。

如果要在不单击提交按钮的情况下重新加载页面,可以添加此JS代码段并删除按钮:

var dropdown = document.getElementById("cat");
function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
        location.href = window.location.href + "?cat="+dropdown.options[dropdown.selectedIndex].value;
    }
}
dropdown.onchange = onCatChange;
有关更多信息,请参阅wp_dropdown_categories() 法典第页。

结束

相关推荐

从Archive.php中排除子页面

我创建了一个称为“服务”的分层自定义帖子类型。以下是我在自定义帖子类型中添加的页面:服务1服务子(服务1为父)服务子(服务1为父)服务子(服务1为父)服务子(服务3为父)服务子(服务3为父)服务子(服务3为父)服务子级(服务4是父级)服务子级(服务4是父级)是否可以从存档服务中排除子页。php?我希望通过使用pre_get_posts, 但这似乎不可能。