我在创建一个短代码时遇到了问题。
我有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 »\' . \'</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">←</span> Older posts\' ) ) . \'</div>\'
. \'<div class="nav-next">\' . previous_posts_link( __( \'Newer posts <span class="meta-nav">→</span>\' ) ) . \'</div>\'
. \'</div>\' .
wp_reset_query();
}
add_shortcode( \'feed\', \'section_feed_shortcode\' );
最合适的回答,由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 »\' . \'</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">←</span> Older posts\' ) ) . \'</div>\'
. \'<div class="nav-next">\' . get_previous_posts_link( __( \'Newer posts <span class="meta-nav">→</span>\' ) ) . \'</div>\'
. \'</div>\' .
wp_reset_query();
}
add_shortcode( \'feed\', \'section_feed_shortcode\' );