如何在WordPress中使用快捷码显示帖子?

时间:2020-08-09 作者:user9437856

我正在尝试显示页面上的所有帖子,但它没有显示。我正在使用下面的代码,并在我的页面上添加了短代码gridPost。我得到的是唯一的UL LI,但没有得到标题名。

function getAllPost(){
    $postData=[];
    $wpb_all_query = new WP_Query(array(\'post_type\'=>\'project\', \'post_status\'=>\'publish\', \'posts_per_page\'=>-1));
 if ( $wpb_all_query->have_posts() ) :
    $postData[]=\'<ul>\';
  while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post();
        $postData[]=\'<li><a href="\'.the_permalink().\'">\'.the_title().\'</a></li>\';
    endwhile;
    $postData[]=\'</ul>\';
    wp_reset_postdata();
 
  else : 
    $postData[] =\'<p>Sorry, no posts matched your criteria.</p>\';
  endif;
        $postData = implode( \'\', $postData );
    return $postData;
}
add_shortcode( \'gridPost\', \'getAllPost\');

enter image description here

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

我看到您正在使用以下函数the_permalink that echo their values, but don\'t return them, 然而,您使用它们就像它们确实返回值一样,而它们没有返回值。

除了少数例外,WP函数以the_ 不返回数据,它们会回显数据,因此必须使用以下函数get_permalink

例如:

$foo = the_title(); // <- this is a mistake, it outputs the title
$bar = get_the_title(); // <- this correct, it returns the title
在这里$foo 没有值,并且帖子标题已发送到浏览器。$bar 但是,其行为符合预期,并返回分配给的帖子标题$bar.

想想看,如果the_title 打印帖子的标题,然后你写$title = the_title(); 它怎么知道您想把它放在变量中呢?事实并非如此。计算机完全按照你说的做,而不是你的意思。PHP试图提供帮助,并将给它一个空值以避免致命错误。

作为旁白,你不应该posts_per_page-1, 将其设置为您从未期望达到的超高数字,或添加分页,否则您将面临超时和内存不足问题的风险。

相关推荐

What does this shortcode do?

function my_shortcode($atts, $content = null){ extract(shortcode_atts(array(\"type\" => \"warrning\"), $atts)); return \".$content.\"; } add_shortcode(\"warrning_dialog\", \"my_shortcode\"); 我知道它会创建短代码[warning\\u dialo