分页不起作用-FrontPage

时间:2021-05-07 作者:Chinmay Rajyaguru

我正在尝试通过函数添加分页。php。无输出!我错过了什么?

function simpleblog() {
    $query = \'posts_per_page=6\';
    $queryObject = new WP_Query($query);
    // The Loop...
    if ($queryObject->have_posts()) {
        while ($queryObject->have_posts()) {
            $queryObject->the_post();
            //the_title();
            //the_content();
            get_template_part( \'content\' );
            echo \'<hr class="empty-space-hr">\';
        }
    } else {
        //no post found
    }

        echo\'<div class="pagination">\';
        echo paginate_links( array(
            \'base\'         => str_replace( 999999999, \'%#%\', esc_url( get_pagenum_link( 999999999 ) ) ),
            \'total\'        => $query->max_num_pages,
            \'current\'      => max( 1, get_query_var( \'paged\' ) ),
            \'format\'       => \'?paged=%#%\',
            \'show_all\'     => false,
            \'type\'         => \'plain\',
            \'end_size\'     => 2,
            \'mid_size\'     => 1,
            \'prev_next\'    => true,
            \'prev_text\'    => sprintf( \'<i></i> %1$s\', __( \'Newer Posts\', \'text-domain\' ) ),
            \'next_text\'    => sprintf( \'%1$s <i></i>\', __( \'Older Posts\', \'text-domain\' ) ),
            \'add_args\'     => false,
            \'add_fragment\' => \'\',
        ) );
        echo \'</div>\';
    
    /* Restore original Post Data */
    wp_reset_postdata();
}
add_shortcode( \'simpleblog\', \'simpleblog\' );

2 个回复
SO网友:Robert Went

我在存档页面上使用此选项。如果您试图在其他地方使用它,那么这可能是问题的原因。

if ( ! function_exists( \'_s_pagination_links\' ) ) :
/**
 * Numbered pagination
 */
function _s_pagination_links() {
    global $wp_query;

    $total_pages = $wp_query->max_num_pages;

    if ($total_pages > 1){
        $current_page = max(1, get_query_var(\'paged\'));

        echo paginate_links(array(
            \'base\' => get_pagenum_link(1) . \'%_%\',
            \'format\' => \'page/%#%\',
            \'type\'      => \'list\',
            \'current\' => $current_page,
            \'total\' => $total_pages,
        ));
    }
}
endif;

SO网友:Sally CJ

所以你在评论中说:

如果我点击第二或第三或任何页码,它会将我重定向到同一页(首页)

这是因为您的查询参数($query) 缺少paged argument 这是为帖子分页所需的。

因此,请确保将该参数添加到查询中。E、 g.使用数组:

$query = array(
    \'posts_per_page\' => 6,
    \'paged\'          => get_query_var( \'page\' ),
);
请注意,我假设您实际上正在使用static front page, 因此我使用get_query_var( \'page\' ) 而不是get_query_var( \'paged\' ) (请注意page vs公司paged — 在$query 尽管如此,它是paged).

所以你也应该用它paginate_links():

echo paginate_links( array(
    ... your args.
    \'current\'      => max( 1, get_query_var( \'page\' ) ), // use \'page\' and not \'paged\'
    ... your args.
) );
顺便说一句,在问题中,(似乎)你输入了一个错误:那$query->max_num_pages 应该是$queryObject->max_num_pages.

如果您实际上没有使用静态首页,那么您应该避免404个由于与WordPress主查询冲突而导致的分页错误。

更新(抱歉,我没有注意到add_shortcode() 调用您的代码。)

无输出!我错过了什么?

正如注释中所指出的那样,短代码必须返回最终输出,并且不回显,短代码函数不应回显任何其他内容。否则,输出将错误地放置在帖子内容中,并在REST API响应中导致JSON错误,并导致无法通过Gutenberg/块编辑器保存帖子。这只是可能发生的两个示例问题。

因此,如果您的短代码使用复杂的HTML标记,您可以使用output buffering; 否则,只需将输出存储在变量中,然后返回它即可。简化示例:

// Using output buffering:
function simpleblog() {
    ob_start();
    ?>
        some complex HTML
    <?php
    return ob_get_clean();
}

// Storing to a variable:
function simpleblog() {
    $output = \'\';

    // ... your code here; no \'echo\' calls.
    $output .= \'foo bar\';

    return $output;
}

进一步阅读https://codex.wordpress.org/Pagination
  • https://codex.wordpress.org/Shortcode_API
  • 相关推荐

    og:image functions.php

    我有自定义模板,我需要得到og:在标题图像url。类映像在DB wp\\u postmeta-meta\\u value中的位置我尝试使用函数。phpfunction getOgImage() { global $wpdb; $ogimage = $wpdb->get_results(\"SELECT DISTINCT post_id FROM wp_postmeta WHERE meta_value\", OBJECT); echo