按作者分类的相关帖子在生产站点上不起作用

时间:2014-12-20 作者:bpy

我使用的代码改编自this example 并在我的本地主机上成功测试,但当我将站点传递到实时服务器时,分页会在wordpress permalinks集(/%postname%/)下崩溃,并且只适用于默认的wp permalinks(?p=123)。问题是它没有显示任何404页,但它也不允许我转到第二页或第三页,或者任何其他页(如果存在的话)。

这是一个列表(自定义postype)页面(single listing.php),我的页面如下所示:

当前单一上市内容

  • 相关列表
    1. 我做了一些研究,甚至尝试替换“paged”,因为分页存档和单个帖子的查询变量应该使用“page”并遵循@pietergoosen 关于的提示this notice 通过打开mysql。本地php中的trace\\u模式。ini。之后,我重新启动了wampp中的所有服务,并且localhost上的分页工作正常,所以我认为这可能不是问题所在。

      这是我的代码:

        <?php  
        global $authordata, $post;
      
      $paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
      $args = array( 
          \'author\'            => $authordata->ID, 
          \'post_type\'         => \'post\', 
          \'post__not_in\'      => array( $post->ID ), 
          \'posts_per_page\'    => 3,
          \'paged\'             => $paged
      );
      $authors_posts = new WP_Query( $args );
      
      if( $authors_posts->have_posts()) : while( $authors_posts->have_posts()) : 
      $authors_posts->the_post(); ?>
      
      <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" ><?php the_title(); ?></a>
      
       <?php the_post_thumbnail( array(80,135));?>
       <?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,40);?>
              <?php endwhile; ?>
      
       <?php if($authors_posts->max_num_pages)
       if(function_exists(\'wp_pagenavi\'))
       wp_pagenavi(array(
      \'query\' =>$authors_posts   
       )); ?>
       <?php endif; wp_reset_query(); ?>
      

      EDIT

      我已选择@pietergoosen 答案是解决了我的问题,但我不明白为什么我的代码停止在实时服务器上工作。现在,我可能永远不会使用这些信息,但我肯定想知道为什么我的代码在本地主机(使用wampserver)上工作,而不是在实时服务器上工作。。。

      如果你知道这个问题的答案,请发表评论。谢谢

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

    正如我所说的,您所追求的整个设置在本机上是不可能的。您的设置可能使用默认的永久链接结构,因为两个查询(主查询和自定义查询)都以相同的方式读取这些永久链接。当您切换到permalinks时,单个页面上的两个查询会对URL进行不同的解释,从而在尝试对自定义查询分页时导致其中一个查询失败

    单页永远不应该以这种方式分页,特别是使用漂亮的永久链接。我已经提出了一些想法,实现这一点的最佳方法是

    编写自己的分页函数,可以从URL读取页码

    编写您自己的函数,可以将页码附加到URL,例如添加/2/ 到单个页面的URL。

    我必须强调,如果你用<!--nextpage-->, 您的帖子还将与自定义查询一起分页。此外,如果permalink结构未设置为/%postname%/, 代码将失败并通过显示错误消息wp_die()

    代码是获取下一页/上一页并将页码添加到URL的代码。

    function get_single_pagination_link( $pagenum = 1 ) {
        global $wp_rewrite;
    
        if( is_singular() && $wp_rewrite->permalink_structure == \'/%postname%/\') {
    
            $pagenum = (int) $pagenum;
    
            $post_id = get_queried_object_id();
            $request = get_permalink( $post_id );
    
            if ( $pagenum > 1 ) {
                $request = trailingslashit( $request ) . user_trailingslashit( $pagenum );
            }
    
            return esc_url( $request );
    
        }else{
    
            wp_die( \'<strong>The function get_single_pagination_link() requires that your permalinks are set to /%postname%/</strong>\' );
    
        }
    }
    
    在对自定义查询分页时,可以按如下方式使用此函数获取单个页面中任何页面的链接

    get_single_pagination_link( \'pagenumber_of_previous_or_next_page\' );
    
    同样,正如我所说,没有分页函数能够对自定义查询分页或从URL读取页码,因此您必须编写自己的分页函数。

    我的想法是在自定义查询中创建指向下一页和上一页的链接。如果仔细观察,您将看到我是如何使用前面声明的函数的get_single_pagination_link() 获取下一页和上一页的链接

    function get_next_single_page_link ( $label = null, $max_page = 0 ) {
        global $wp_query;
    
        if ( !$max_page ) {
            $max_page = $wp_query->max_num_pages;
        }
    
        $paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
    
        if( is_singular() ) {
    
            $next_page = intval($paged) + 1;
    
            if ( null === $label ) {
                $label = __( \'Next Page &raquo;\' );
            }
    
            if ( ( $next_page <= $max_page ) ) {
                return \'<a href="\' . get_single_pagination_link( $next_page ) . \'">\' . $label . \'</a>\';
            }
    
        }
    }
    
    function get_previous_single_page_link( $label = null ) {
    
        $paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
    
        if( is_singular() ) {
    
            $prev_page = intval($paged) - 1;
    
            if ( null === $label ) {
                $label = __( \'&laquo; Previous Page\' );
            }
    
            if ( ( $prev_page > 0 ) ) {
                return \'<a href="\' . get_single_pagination_link( $prev_page ) . \'">\' . $label . \'</a>\';
            }
    
        }
    
    }
    
    现在可以在代码中使用这两个函数对自定义查询分页。这两个函数的工作原理完全相同get_next_posts_link()get_previous_posts_link() 并且使用相同的精确参数,因此您需要记住,您需要传递$max_page 自定义查询的参数

    这是使用这些函数的自定义查询。

    function get_related_author_posts() {
    
        global $authordata, $post;
    
        $paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
    
        $args = array( 
            \'posts_per_page\'    => 2,
            \'paged\'             => $paged
        );
        $authors_posts = new WP_Query( $args );
    
        $output = \'\';
    
        if( $authors_posts->have_posts() ) {
    
            $output = \'<ul>\';
    
            while( $authors_posts->have_posts() ) {
                $authors_posts->the_post();
    
                $output .= \'<li><a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a>\' . get_the_excerpt() . \'</li>\';
    
            }
    
            $output .= \'</ul>\';
    
            $output .= get_previous_single_page_link();
            $output .= get_next_single_page_link( null , $authors_posts->max_num_pages );
    
            wp_reset_postdata();
        }
    
        return $output;
    
    }
    

    结束

    相关推荐

    Pagination and Related Posts

    是否可以对嵌入在single中的以下相关POST代码使用分页。我的主题的php。 <?php // for use in the loop, list 5 post titles related to first tag on current post $tags = wp_get_post_tags($post->ID); if ($tags) { $first_tag = $