当前位置: 首页 > 知识库问答 >
问题:

WordPress自定义查询与自定义分类法-分页错误

雍河
2023-03-14

我已经创建了一个包含多个分类法的自定义查询,在此基础上,我使用paginate_链接进行分页。分类法是通过下拉选择表单来选择的,使用onchange=“this.form.submit()”可以过滤帖子,这只是一个临时解决方案,但目前效果良好,值得注意。

分页工作正常,当选择分类术语时,帖子可以正确显示,但是当我离开第一页,比如说我进入第2页,在下拉选择器中选择不同的分类术语时,URL会保留当前页码,并向其中添加选择器ID。我想实现的是,当我在选择器中单击不同的分类法时,新选择的分类法查询将创建一个新的URL,从该分类法的第一页开始。

让我举一个例子来更清楚地说明我上面的意思:

  1. 我从品牌选择器中选择分类术语“brand1”,以显示与该分类术语相关的所有帖子

此时的URL是mydomainname。com/?brandselector=brand1,目前为止效果良好。

我通过分页转到第2页,现在URL如下所示:
mydomainname。com/page/2/?brandselector=brand1

问题本身从这里开始:我单击任何下拉选择器中的不同分类法术语,如下所示:

现在,如果分类法术语没有足够的文章到达多页分页,我会得到一个空页,或者我会看到第2页的文章列表,或者我之前看到的任何一个新选择的分类法术语的编号。

URL现在看起来像这样:mydomainname.com/page/2/?brandselector=brand2

因此,不会在新选择的分类术语上重置页码。

我的代码:

    global $wpdb, $post, $page;
    
    echo "<div class='entry-content'>";
    
    echo '<div class="filter-box">';
    
    echo '<form name="selectbrand" method="GET" style="width:200px;">';
    echo '<select id="brandselector" name="brandselector" onchange="this.form.submit()">';
      echo '<option value="">Select brand:</option>';
        $brands = get_terms(array(
                        'taxonomy' => 'brand',
                        'hide_empty' => true,
                        'orderby' => 'name',
                    ) );
       
    foreach ( $brands as $brand ) { ?>
    <?php echo '<option value="' . $brand->slug . '">' . $brand->name . '</option>';
            };
            echo '</select>';
            echo '</form>';
    
    echo '<form name="selectdrive" method="GET" style="width:200px;">';
    echo '<select id="driveselector" name="driveselector" onchange="this.form.submit()">';
      echo '<option value="">Select drive:</option>';
        $drives = get_terms(array(
                        'taxonomy' => 'drive_cat',
                        'hide_empty' => true,
                        'orderby' => 'name',
                    ) );
       
    foreach ( $drives as $drive ) { ?>
    <?php echo '<option value="' . $drive->slug . '">' . $drive->name . '</option>';
            };
            echo '</select>';
            echo '</form>';
            
    echo '</div>'; //filter-box
    
    
    if ( !empty( $_GET['driveselector'])){
        $term_id = $_GET['driveselector'];
        }
    
    
    if ( !empty( $_GET['brandselector'])){
        $term_id = $_GET['brandselector'];
        }
     
     //<-----------------<<<<Main Query start>>>>---------------------
       
       $main_args = array(
                'post_type'=> 'things',
                'orderby' => 'date',
                'order'   => 'DESC',
                'posts_per_page' => 5,
                'paged' => $page,
    );
    
     //<-----------------<<<<Main Query + Custom Query>>>>---------------------
    
    $taxquery = array();
    
    if ( !empty($term_id) || isset($term_id) ) {
        array_push($taxquery,array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'brand',
                'field' => 'slug',
                'terms' => $term_id
                ),
            array(
                'taxonomy' => 'drive_cat',
                'field' => 'slug',
                'terms' => $term_id
                )
            ));
    }
    
    if(!empty($taxquery)){
        $main_args['tax_query'] = $taxquery;
    }
    
    global $main_query;
    $main_query = new WP_Query( $main_args );

'<div class="content-box">';

  if ( $main_query->have_posts() ) :
   while ( $main_query->have_posts() ) : $main_query->the_post();

  //content start here

和分页:

//<!-- end blog posts -->

endwhile;

echo '<div class="pagination">';
$total_pages = $main_query->max_num_pages;
if ($total_pages > 1){
    $current_page = max(1, get_query_var('page'));
       echo paginate_links(array(
            'base' => preg_replace('/\?.*/', '/', get_pagenum_link(1)) . '%_%',
            'current' => $current_page,
            'total' => $total_pages,
            'prev_text'    => __('« prev'),
            'next_text'    => __('next »'),
        ));
}    
echo '</div>';

wp_reset_postdata();

endif;

当点击不同的分类法术语时,我错过了重置网址的什么?任何建议将高度赞赏,如果我使用某些技术术语错误,对不起,我仍在学习。谢谢。

共有1个答案

贺俊杰
2023-03-14

由于您没有为表单元素定义操作属性,因此默认操作是转到当前url。因此,一旦使用分页超链接,下一次表单将向该链接发送请求。设置action属性将解决此问题。

echo '<form action="/" name="selectdrive" method="GET" style="width:200px;">';
 类似资料:
  • 我有一个自定义的文章类型(媒体文章),它使用一些自定义字段,有一个自定义分类法(媒体文章类别)和该分类法中的14个术语。我可以使用CPT归档模板输出所有自定义帖子。 我在侧边栏中还有一个菜单,它列出了用于过滤自定义帖子的术语(我使用了一个自定义WP菜单小部件来创建列表)。 我用一个查询设置了一个自定义分类模板。根据args中放置的分类术语,我能够成功地组合或单独显示帖子。因此,如果我不需要使用过滤

  • 上一页下一页都是第一页的内容

  • 我正在尝试创建一个查询,其中我在自定义帖子类型中创建了多个类别(分类法),然后在主页上根据具体的内容进行查询,这样做很好。目前我有3种分类法: 当前特价 meineke-差异 特色 我已经编写了拉动这些的代码。我遇到的问题是,在主页上,当这些帖子也附加到“特色”分类法时,它只需要拉这些帖子。因此,这方面的标准逻辑示例如下: 如果分类法=当前特价商品和特色商品,则成功或失败 但是它所做的是把它们都拉

  • 我的股票与分页我尝试了很多解决方案,但没有工作!我使用WordPress5.4。我的网站是一个单页网站,当然我想在索引中使用它。php 这是我的密码: 很抱歉,如果这是一个高度重复的问题——我发现的其他修复方法都不适用于我。请有人告诉我问题在哪里? 谢谢! 编辑1我尝试了这个,它也不工作!

  • 我有一个与自定义分类法(支持)相关的自定义帖子类型(问题) 在我的主题/分类中。php我有以下代码: 这意味着我针对“支持”分类法的特定模板文件。 在分类法模板文件中,我进行了自定义查询: 我有大约11篇文章,第1页显示了前5篇文章,但问题是没有显示分页。 有什么想法吗?非常感谢。

  • 我正在使用wordpress,并尝试为类别页面创建自定义描述。 我修改了它的header.php文件,以响应自定义标题和描述。但是Wordpress正在用第一篇文章的元描述替换我的元描述。 我怎样才能阻止这一切? 我的代码: 我使用电子电影主题:http://fthemes.com/emovies-free-wordpress-theme/ 我的网站类别链接:http://www.raagalu.