短码分页不前进

时间:2018-01-10 作者:Josh Rodgers

我有一个正在运行的图片库,我正在将其转换为一个快捷码,这样定位就可以灵活,我不必反复复制代码。

我遇到的问题是分页无法前进到下一页。图像显示,分页显示,页码显示。。。但当我尝试点击第二页或第三页时,图像、页码和页码都不会改变。URL会改变,内容不会改变。

我有一个带有一些手动代码的页面(当单击分页时,该页面会工作、前进或更改)。

我正在工作的网站是:http://joshrodg.com/test/banquet/2017-induction-banquet/. 我的测试短代码位于顶部(2017年入职宴会下方),有效的短代码位于底部(手动代码)。

我的短代码如下所示:[halloffame rml_folder="16"]

我的函数如下所示:

function picture_gallery($atts){
    extract(shortcode_atts(array(
        \'rml_folder\' => 1
    ), $atts));

    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
    query_posts("post_status=inherit&post_type=attachment&rml_folder=".$rml_folder."&orderby=title&order=asc&posts_per_page=12&paged=".$paged);

    if ( have_posts() ) :
        $return_string .= \'<div id="album">\';
            while ( have_posts() ) : the_post();
                $return_string .= \'<div class="gallery">\';
                    $image = wp_get_attachment_image(get_post_thumbnail_id($post->ID), \'medium\');
                    $return_string .= \'<a href="\'.wp_get_attachment_url($post->ID).\'" class="simplelightbox">\'.$image.\'</a>\';
                    $return_string .= \'<p>\'.get_the_title().\'</p>\';
                $return_string .= \'</div>\';
            endwhile;
        $return_string .= \'</div>\';
    endif;

    $return_string .= \'<div id="pagi">\';
        $return_string .= \'<div class="wrap">\';
            $args = array(
                \'prev_text\' => __(\'<span class="left"></span><span class="ion-android-arrow-dropleft"></span>\'),
                \'next_text\' => __(\'<span class="ion-android-arrow-dropright"></span><span class="right"></span>\')
            );
            $return_string .= paginate_links($args);
        $return_string .= \'</div>\';
    $return_string .= \'</div>\';

    global $wp_query;
    $current_page = get_query_var( \'paged\' );
    $pages = $wp_query->max_num_pages;
    $return_string .= \'<p align="center">(Page: \'.$current_page.\' of \'.$pages.\')</p>\';

    wp_reset_query();

    return $return_string;
}

function register_shortcodes(){
    add_shortcode(\'halloffame\', \'picture_gallery\');
}
add_action( \'init\', \'register_shortcodes\');
因为这是使用手动代码,所以我猜我的短代码有些地方不太正确。

有什么想法吗?

**更新**

所以,在页面上http://joshrodg.com/test/banquet/, 分页已断开,但打开http://joshrodg.com/test/banquet/2017-induction-banquet/ 分页工作正常。2017-induction-banquet 是原始帖子,是的子帖子http://joshrodg.com/test/banquet/. 在…上http://joshrodg.com/test/banquet/, 我正在显示所有子页面的内容。所以,短代码本身是有效的,只是不在这个页面上-所以我的循环可能有问题。

此页面的循环如下所示:

<?php query_posts("order=asc&orderby=menu_order&posts_per_page=-1&post_type=page&post_parent=".$post->ID); ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <div class="wrap">
            <h2><?php the_title(); ?></h2>
        </div>
        <p><?php the_content(); ?></p>
    <?php endwhile; ?>
<?php wp_reset_query(); ?>
我想这页上的短代码和循环中的循环可能有冲突。

原始页面上的分页如下所示:http://joshrodg.com/test/banquet/2017-induction-banquet/page/2/

父页上的分页如下所示:http://joshrodg.com/test/banquet/page/2/

我不确定这是否有什么不同,但我认为这值得一提。

谢谢,乔希

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

所以,我设法找到了一个解决办法。

我试图改变query_posts 在我的短代码上,但由于某种原因,我无法使其工作。我更改了页面上的查询,解决了问题。

查询现在如下所示:

<?php
    $args = array(
        \'order\' => \'asc\',
        \'orderby\' => \'menu_order\',
        \'posts_per_page\' => -1,
        \'post_type\' => \'page\',
        \'post_parent\' => $post->ID

    );

    $query = new WP_Query( $args );
?>

    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
        <div class="wrap">
            <h2><?php the_title(); ?></h2>
        </div>
        <p><?php the_content(); ?></p>
    <?php endwhile; ?>
<?php wp_reset_postdata(); ?>
短代码没有更改(删除连字符除外)。

因此,这两个查询相互冲突。不同的查询query_postsWP_Query 已修复此问题。

谢谢,乔希

SO网友:Rick Hellewell

短代码名称中不要使用连字符。看见https://codex.wordpress.org/Shortcode_API#Hyphens .

结束

相关推荐

将WP_QUERY限制为仅X个结果(总计,而不是每页)

如何将WP\\u查询限制为仅获取5个结果?我的意思是,实际上每页只有5条结果,而不是5条帖子。这How to limit the number of posts that WP_Query gets?提供一些可供使用的见解和建议no_found_rows=true 但您是将其用于每页的posts\\u,还是需要将结果限制在其他地方?在我的情况下(搜索)get_posts 不起作用,因为我需要提供搜索查询。