页面未找到,帖子是否已列出?

时间:2011-12-29 作者:petermolnar

好吧,说真的。我有一个真正修改过的索引。php。结果:在第二个分页页面之后,该页面返回Not found 和404,而帖子已经显示出来了。

有人能告诉我发生了什么事吗?

该问题的工作示例:

一切正常:http://petermolnar.eu/photobloghttp://petermolnar.eu/photoblog/page/2/http://petermolnar.eu/photoblog/page/3/等等。

代码:

index.php

<?php
    define (\'REDIRECT_TO_PORTFOLIO\', get_option (\'siteurl\') . \'/portfolio/through-a-lupe/\' );
    $_query_string = $query_string;

    if ( is_home() || is_front_page() )
    {
        wp_redirect( REDIRECT_TO_PORTFOLIO );
        exit;
    }

    $cat = get_query_var(\'cat\');
    if ( !empty( $cat ) ) :
        $show_pagination = false;
        $show_sidebar = false;
        $posts_per_page = get_option(\'posts_per_page \');
        $category = get_category( $cat );
        $orderby = \'date\';
        $order = \'DESC\';
        switch ($category->slug) :
            case \'portfolio\':
                    wp_redirect( REDIRECT_TO_PORTFOLIO );
                    exit;
                break;
            case \'photoblog\':
                $posts_per_page = 4;
                $show_pagination = true;
                break;
            case \'wordpress\':
                $orderby = \'modified\';
                $show_sidebar = true;
                break;
            default:
                $show_sidebar = true;
                break;
        endswitch;
        $_query_string = $query_string . \'&posts_per_page=\' . $posts_per_page . \'&order=\' . $order . \'&orderby=\' . $orderby;
    endif;

    get_header();
    query_posts( $_query_string );

    if ( $show_sidebar ) :
    ?>
        <section class="category-postlist">
    <?php
    endif;

    if ( have_posts() ) :
        while ( have_posts() ) :
            get_template_part(\'singles\');
        endwhile;
    endif;

    if ( $show_sidebar ) :
    ?>
        </section>
        <section class="sidebar">
    <?php
        echo wp_list_posts( -1, get_option(\'posts_per_page \') );
    ?>
        </section>
    <?php
    endif;

    if( function_exists(\'wp_paginate\') && $show_pagination )
        wp_paginate();

    get_footer();
?>

SOLVED

我可以在几个小时后解决,请查看第一条评论进行解释。这是由分页计数器中的某种错误引起的,它总是使用默认值来计算分页,而不是新的分页。在使用per post值查询post后,必须重新计算分页。

2 个回复
最合适的回答,由SO网友:Dmitry Misharov 整理而成

这不是解决问题的正确方法,也不是bug。下面是发生这种情况的原因解释:“分页是在您访问运行query\\u posts的模板文件之前计算的。有条件地更改每页posts\\u的正确方法是使用pre\\u get\\u posts挂钩来修改主查询。”https://wordpress.stackexchange.com/a/42063/17177我找到了一个适合我的实现“pre\\u get\\u posts”http://uncommoncontent.com/2012/01/28/add-custom-post-types-to-the-loop:

if ( ! function_exists( \'ucc_add_cpts_to_pre_get_posts\' ) ) {
    function ucc_add_cpts_to_pre_get_posts( $query ) {
        if ( $query->is_main_query() && ! is_post_type_archive() && ! is_singular() && ! is_404() ) {
        $my_post_type = get_query_var( \'post_type\' );
            if ( empty( $my_post_type ) ) {
                $args = array(
                    \'exclude_from_search\' => false,
                    \'public\' => true,
                    \'_builtin\' => false
                );
                $output = \'names\';
                $operator = \'and\';
                $post_types = get_post_types( $args, $output, $operator );

                // Or uncomment and edit to explicitly state which post types you want.
                // $post_types = array( \'event\', \'location\' );
                // Add \'link\' and/or \'page\' to array() if you want these included.
                // array( \'post\', \'link\', \'page\' ), etc.
                $post_types = array_merge( $post_types, array( \'post\' ) );
                $query->set(\'post_type\', $post_types );
            }
        }
    } 
}

add_action( \'pre_get_posts\', \'ucc_add_cpts_to_pre_get_posts\' );

SO网友:petermolnar

好吧,这是我见过的最愚蠢的虫子。

根据这个solution by Iriswebsolutions, 当每页的默认值大于自定义查询中的值时,问题就会出现。

解决方案:将默认值更改为1, 添加$posts_per_page = 10; “我的开关盒”部分的默认部分。

EDIT

因此,代码将是(仅修改部分):

    if ( !empty( $cat ) ) :
        $show_pagination = false;
        $show_sidebar = false;

        /* this would get the default post per page, but it\'s buggy */
        /* $posts_per_page = get_option(\'posts_per_page \'); */

        /* the true default post per page you want */
        $posts_per_page = 10; 
其余的都一样。

结束

相关推荐

The pagination doesn't work

我已经创建了一个新的WordPress主题,我完成了。。但我有一个问题。我无法进行分页。我使用“wp paginate”插件,并在索引中添加了以下代码。php:<?php if(function_exists(\'wp_paginate\')) { wp_paginate(); } ?> 但这对我的网站不起作用。前端和标记中仍然没有任何内容。我能做什么?这是我的索引。php: <?php get_header(); ?>