我正在尝试创建一个自定义的短代码来显示最近发布的文章的最后x数量。
但这个短代码的特点是,应该有可能显示第一篇文章,最近的一篇,在完整的扩展中,不仅是有效的,而且是充分的,有什么想法我该如何做到这一点?
这是我的密码。。。
add_shortcode( \'custom-home-posts\', function () {
extract(shortcode_atts(array(
"num" => \'5\',
"cat" => ’
), $atts));
global $post;
$myposts = get_posts(\'numberposts=\'.$num.\'&order=DESC&orderby=post_date&category=\'.$cat);
$i = 0;
foreach($myposts as $post){
$i++;
if ($i == 1)
{
$out.=\'<div class="post">
<h3 class="post-title"><a href="\'.get_the_permalink().\'" title="\'.get_the_title().\'">\'.get_the_title().\'</a></h3>
<span class="author-date-blog">\'.get_the_author().\'|\'.get_the_date(\'d M Y\').\'</span>
<div class="excerpt">
\'.get_the_content().\'
<div class="read-more">
<a href="\'.get_the_permalink().\'#disqus_thread">Leave a Comment >></a>
</div>
</div>
</div>\';
}
else
{
$out.=\'<div class="post">
<div class="thumb">
<a href="\'.get_the_permalink().\'" title="\'.get_the_title().\'">\'.get_the_post_thumbnail(\'blog-thumb\').\'</a>
</div>
<h3 class="post-title"><a href="\'.get_the_permalink().\'" title="\'.get_the_title().\'">\'.get_the_title().\'</a></h3>
<span class="author-date-blog">\'.get_the_author(). \'|\'.get_the_date(\'d M Y\').\'</span>
<div class="excerpt">\'
.get_the_excerpt().
\'<div class="read-more">
<a href="\'.get_the_permalink().\'">Read More >></a>
</div>
</div>
</div>\';
}
}
return html_entity_decode($out);
} );
此代码看起来正常,但
if($i==1)
我对
get_the_content
, 因为它返回来自同一页面上使用的另一个插件的前一个帖子数组,这很奇怪,所以我认为
get_the_content
在当前帖子的范围内,但似乎不是这样。。。我希望我能解释一下我的意思。因此,基本上第一篇文章的内容显示在页面上先前插件/快捷代码的gridview中。
所有其他帖子,2、3、4等都显示正确,但我只在这里使用get_the_excerpt
.
!!!还有一个问题,有没有可能显示的不是完整的帖子,而是摘录,只有这么多的单词,比如200个。
提前感谢
最合适的回答,由SO网友:Nilambar Sharma 整理而成
您的代码中有几个问题。如第4行中的语法错误。未定义的$out变量PHP注意事项。主要问题是您没有正确使用循环。在foreach中,您需要使用setup_postdata()
它还需要正确重置。请检查以下内容。
add_shortcode( \'custom-home-posts\', function ( $atts ) {
extract(shortcode_atts(array(
"num" => \'5\',
"cat" => \'\',
), $atts));
global $post;
$out = \'\';
$myposts = get_posts(\'numberposts=\'.$num.\'&order=DESC&orderby=post_date&category=\'.$cat);
$i = 0;
foreach($myposts as $post){
setup_postdata( $post );
$i++;
if ($i == 1)
{
$out.=\'<div class="post">
<h3 class="post-title"><a href="\'.get_the_permalink().\'" title="\'.get_the_title().\'">\'.get_the_title().\'</a></h3>
<span class="author-date-blog">\'.get_the_author().\'|\'.get_the_date(\'d M Y\').\'</span>
<div class="excerpt">
\'.get_the_content().\'
<div class="read-more">
<a href="\'.get_the_permalink().\'#disqus_thread">Leave a Comment >></a>
</div>
</div>
</div>\';
}
else
{
$out.=\'<div class="post">
<div class="thumb">
<a href="\'.get_the_permalink().\'" title="\'.get_the_title().\'">\'.get_the_post_thumbnail(\'blog-thumb\').\'</a>
</div>
<h3 class="post-title"><a href="\'.get_the_permalink().\'" title="\'.get_the_title().\'">\'.get_the_title().\'</a></h3>
<span class="author-date-blog">\'.get_the_author(). \'|\'.get_the_date(\'d M Y\').\'</span>
<div class="excerpt">\'
.get_the_excerpt().
\'<div class="read-more">
<a href="\'.get_the_permalink().\'">Read More >></a>
</div>
</div>
</div>\';
}
wp_reset_postdata();
}
return html_entity_decode($out);
} );