显示自定义邮政类型的快捷代码

时间:2012-07-18 作者:Aaron

我在创建一个短代码时遇到了问题。

我有5-10种不同的自定义帖子类型,与其为每个帖子类型创建模板,不如使用普通页面并通过快捷码导入帖子。

为了进一步解释,我有一个名为“景点”的页面和一个名为“景点”的帖子类型。在页面上,我插入短代码->[feed type=“attraction”limit=“5”]

这将输出自定义帖子类型“attraction”下的所有帖子。

我遇到的问题是如何正确分页。我读过一千种自定义帖子类型分页的方法,我目前使用的代码往往适合这么多人,但我无法在短代码中实现这一点。这有什么原因吗?

当前页面显示良好,有五篇文章,但不回显下一篇、上一篇文章的链接。如果我键入url+/第/2页,第二页将正确显示,并在该部分中显示接下来的5篇文章。因此,似乎分页正在工作,但我无法访问它们,因为没有显示下一个/上一个链接。

这样做的好处是,我可以使用一个普通页面,导入帖子,并且可以在调用的短代码上下包含内容。

希望这一切都有意义。

这是我的短代码-->

    function section_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( \'limit\' => -1, \'type\' => \'post\'), $atts ) );

    global $paged;
    $q = new WP_Query(  array ( 
        \'posts_per_page\' => $limit, 
        \'post_type\' => $type, 
        order => \'ASC\', 
        orderby =>\'menu_order\', 
        \'paged\' => $paged ) );

    $list = \' \';

    while ( $q->have_posts() ) { $q->the_post();

        $list .= \'<article class="listing-view clearfix">\' 
        . \'<div class="listing-content">\' 
        . \'<h3><a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a></h3>\' 
        .\'<p>\' . get_the_excerpt() . \'</p>\'
        . \'<a href="\' . get_permalink() . \'">\' . \'View &raquo;\' . \'</a>\'
        . \'</div>\'
        . \'<a class="listing-thumb" href="\' . get_permalink() . \'">\' . get_the_post_thumbnail($page->ID, \'listing-thumb\')  . \'<span></span></a>\'
        . \'</article>\';
    }

    return 
    \'<div class="listings clearfix">\' 
    . $list 
    . \'<div class="nav-previous">\' . next_posts_link( __( \'<span class="meta-nav">&larr;</span> Older posts\' ) ) . \'</div>\'
    . \'<div class="nav-next">\' . previous_posts_link( __( \'Newer posts <span class="meta-nav">&rarr;</span>\' ) ) . \'</div>\'
    . \'</div>\' .
    wp_reset_query();

}
add_shortcode( \'feed\', \'section_feed_shortcode\' );

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

好吧,我仍然不喜欢第二次查询的想法,但你是对的,很难将内容添加到归档页面。

我发现了3个问题:

next\\u posts\\u link和previous\\u posts\\u link都是回显的,您需要它们的get\\u等价物。

当您查找get\\u next\\u posts\\u链接时,您会发现它依赖于全局$wp\\u查询。。。在您的情况下,它总是用于实际的“页面”,而不是用于短代码的查询。您需要实际查询\\u帖子,然后压扁原始查询。我希望重置查询可以工作,但我不能百分之百确定。你必须对此进行测试。

我不确定这是否是个问题,但我通常看到$paged变量是这样定义的,所以我选择了它。

function section_feed_shortcode( $atts ) {
extract( shortcode_atts( array( \'limit\' => -1, \'type\' => \'post\'), $atts ) );

$paged = get_query_var(\'paged\') ? get_query_var(\'paged\') : 1;  

query_posts(  array ( 
    \'posts_per_page\' => $limit, 
    \'post_type\' => $type, 
    \'order\' => \'ASC\', 
    \'orderby\' =>\'menu_order\', 
    \'paged\' => $paged ) );

$list = \' \';   

while ( have_posts() ) { the_post();

    $list .= \'<article class="listing-view clearfix">\' 
    . \'<div class="listing-content">\' 
    . \'<h3><a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a></h3>\' 
    .\'<p>\' . get_the_excerpt() . \'</p>\'
    . \'<a href="\' . get_permalink() . \'">\' . \'View &raquo;\' . \'</a>\'
    . \'</div>\'
    . \'<a class="listing-thumb" href="\' . get_permalink() . \'">\' . get_the_post_thumbnail($page->ID, \'listing-thumb\')  . \'<span></span></a>\'
    . \'</article>\';
}

return 
\'<div class="listings clearfix">\' 
. $list 
. \'<div class="nav-previous">\' . get_next_posts_link( __( \'<span class="meta-nav">&larr;</span> Older posts\' ) ) . \'</div>\'
. \'<div class="nav-next">\' . get_previous_posts_link( __( \'Newer posts <span class="meta-nav">&rarr;</span>\' ) ) . \'</div>\'
. \'</div>\' .
wp_reset_query();

}
add_shortcode( \'feed\', \'section_feed_shortcode\' );

结束