显示帖子的自定义快捷码,第一个帖子已满

时间:2019-05-08 作者:Alnedru

我正在尝试创建一个自定义的短代码来显示最近发布的文章的最后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个。

提前感谢

1 个回复
最合适的回答,由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);
} );

相关推荐

Geoip shortcodes in comments

我想知道如何从geoip插件添加国家/地区短代码(https://pl.wordpress.org/plugins/geoip-detect/) 输入注释字段。[geoip\\u detect2 property=“country”]据我所知,注释字段必须是所见即所得字段(默认情况下不是文本)。还有其他方法吗?通过自定义php函数或其他方式?你好,Michal