【问题标题】:wp_pagenavi wont work using custom post per pagewp_pagenavi 无法使用每页的自定义帖子
【发布时间】:2018-09-23 06:32:30
【问题描述】:

我的 wp-navi 插件可以在任何使用全局阅读配置的类别上顺利工作(每页发布“3”),但我有一个类别,我只需要每页显示 1 个,手动设置此值循环之外会破坏我的分页链接,它会生成很多页面(而不是两个,因为我只有两个帖子)并且它们会带回家(我猜是某种 404),我尝试过尽可能多的解决方案我可以在 stackoverflow 和 google 中找到,但还没有运气,我已经使用 wp 几个星期了,所以我不确定我是否在这里做了一些非常愚蠢的事情,所以请帮帮我。

代码如下:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

    //query 1 post
    query_posts("posts_per_page=1&paged=$paged");       
?>
<?php while(have_posts()) : the_post(); ?>
    <div class="entry"> 
        <div class="single_entry">
            <p>
                <?php the_content(); ?>
                <div class="clear"></div>
            </p>
            <?=get_social(); ?>
            <div class="clear"></div>
        </div>
    </div>
<?php endwhile; ?>
<?php if(function_exists('wp_pagenavi')) { ?>
    <div id="pagination">
        <?php wp_pagenavi(); ?> 
    </div>
<?php } ?>

提前致谢 =)。

编辑: 我发现了一些有趣的东西,如果我设置&amp;paged=2 它实际上显示了第二页,并且页面导航显示“第 2 页,共 2 页”,但前提是如果我添加 url 保持这样的“mysite.com/category/” “/page/2/”到最后,它将我重定向到损坏的主页。因此,即使 pagenavi 有效,“/page/#/”也会破坏它,当然 the get_query_var('paged') 或 get_query_var('page') 将返回其默认的“1”,因为我没有使用“/page/”结构,也许我可以通过添加一个?p=#来修复,当我点击页面导航的每个数字时,不太确定如何在插件文件中做到这一点,所以我希望你们能根据我所说的帮助我现在,如果没有,那么我会尝试看看我如何以丑陋的方式解决这个问题。再次提前感谢。

【问题讨论】:

  • 谢谢,但它没有用,我理解他做了什么,事实上我在几个小时前找到了类似的答案,但我不知道为什么不使用我的代码,添加我的查询帖子中的“cat = 18”确实修复了分页中的链接数量,但我仍然被重定向到损坏的主页。即使手动设置分页也无法解决它,:S感谢您提供链接=)。

标签: wordpress


【解决方案1】:

好的,我使用 js/jq 解决了这个问题,我宁愿使用 wp codex 找到解决方案,但我尝试过的一切都没有用,无论如何我都需要它来解决这个问题,此外我不确定这些是如何解决的永久链接在内部工作,编辑插件有点灾难性,在 URL 中添加“&p=2”会造成与“/page/2”相同的损害,所以我用 jq 创建了一个脚本来从 pagenavi 中删除链接,获取他们的目标页面,为每个页面添加一个 onclick 并将目标页码作为参数传递,以便稍后替换表单上的隐藏值并发送表单,然后检索页码并将其添加到 query_posts,它的工作方式类似于一个魅力,但我希望我知道如何在 wp 中进行适当的修复,或者如果它是一个错误,我认为我必须提交一张票。感谢您的帮助,如果有人有更多的想法,欢迎您,如果有人有同样的问题,请随时使用此修复程序。

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" id="change_page">
    <input name="target_page" type="hidden" value="1" id="target_page" />
</form>
<script type="text/javascript">
    function go_to_page(target_page){
        var page = target_page;
        $("#target_page").val(page);
        $('#change_page').submit()
    }
    $(".wp-pagenavi").find("a").each(function(){
            var page = $(this).attr("href");
            page = page.slice(-3);
            page = page.replace("/","");
            page = page.replace("/","");
            // The if below, only apllies to the first link, since it doesn't use "/page/#" structure. 
            if(isNaN(page)) { page = 1; } 
            $(this).attr("href","javascript:void(0)");
            $(this).attr("OnClick","go_to_page("+page+")");
            console.log(page);
    });
</script>

在页面顶部我使用这个:

if(isset($_POST["target_page"])) {
     $page = $_POST["target_page"];
} else {
    $page = 1;
}

【讨论】:

    【解决方案2】:

    试试这个从一个类别中获取一篇帖子,并保持分页:

    query_posts( "category_name=cat_slug_here&posts_per_page=1&paged=$paged");
    

    【讨论】:

    • 这样我没有内容,不知道为什么。感谢您的帮助。
    • 好的,那么您将此代码放在哪个模板中?我认为它类似于 category-mycat.php。您正在使用的文件的名称是什么?
    • category.php,现在我知道我应该使用 category-slug.php 但我结束了为每个类别添加一个 if 语句来检查类别“$cat_title = single_cat_title('', false) ; if($cat_title == "categoryname") {..." 不确定这是否是问题的一部分。
    • 我明白了......我对我的答案进行了更改以解决这个问题。
    • 它解决了您的代码问题,但仍然没有帮助解决我的问题。我读过wordpress中有一个错误,它将/page/部分作为postname,这就是为什么它不能正确显示它,设置“paged=2”有效,所以问题出在url中,如果没有的话在这里工作我将使用 js 进行修复并通过帖子传递变量,但我真的希望找到一个更清晰的答案。再次感谢。
    【解决方案3】:

    您应该使用 WP_Query 类来构建查询。并在 wp_pagenavi() 中将此对象用作变量。

    所以你的代码应该是这样的。

    <?php
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $the_query = new WP_Query( $args );
        $the_query->query('showposts=1&paged='.$paged);
    ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
        <div class="entry"> 
            <div class="single_entry">
                <p>
                    <?php the_content(); ?>
                    <div class="clear"></div>
                </p>
                <?=get_social(); ?>
                <div class="clear"></div>
            </div><!-- fin expert -->
        </div><!-- fin entry -->
    
    <?php endwhile; ?>
    <?php if(function_exists('wp_pagenavi')) { ?>
        <div id="pagination">
            <?php wp_pagenavi(array( 'query' => $the_query )); ?>
        </div>
    <?php } ?>
    

    【讨论】:

      【解决方案4】:

      我也遇到了这个奇怪的分页问题。我不知道是不是因为最新版本的 wp,但我尝试了不同的解决方案,只有这个调整对我有用。将您的 get_query_var('paged') 更改为 get_query_var('page')。试试这个

      <?php
          $paged = (get_query_var('page')) ? get_query_var('page') : 1; //notice this 
          $temp = $wp_query; 
          $wp_query= null;
          $wp_query = new WP_Query(); 
          $wp_query->query('showposts=1&paged='.$paged);
      ?>
      <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
          <div class="entry">
              <div class="single_entry">
                  <p>
                      <?php the_content(); ?>
                      <div class="clear"></div>
                  </p>
                  <?=get_social(); ?>
                  <div class="clear"></div>
              </div><!-- fin expert -->
          </div><!-- fin entry -->
      
      <?php endwhile; ?>
      <?php if(function_exists('wp_pagenavi')) { ?>
          <div id="pagination">
              <?php wp_pagenavi(); ?>
          </div>
      <?php } ?>
      
      <?php $wp_query = null; $wp_query = $temp; ?>
      

      注意: 我还注意到您的 if(function_exists('wp_pagenavi')) { 语句中没有右括号。也更正一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        • 1970-01-01
        相关资源
        最近更新 更多