have_posts()while循环会忽略返回的任何HTML

时间:2019-03-26 14:33:55

标签: php wordpress

因此,基本上,我正在创建一个小函数来从WordPress获取具有特定类别的最新帖子,并将它们链接到“测试”页面中。该函数本身起作用,是从this stackexchange thread抓取的。目前,我的while循环设置忽略了我尝试返回的所有HTML / CSS。

  1. 删除the_post()会忽略$ args并列出所有类别中的所有帖子,而不仅仅是我列出的帖子,但仍会忽略HTML。
  2. 删除wp_reset_postdata()并不能解决我的问题。
  3. 添加<br>或clearfix div不能解决问题。
  4. 在while循环中具有return只会发布最近的帖子,因为它一旦返回便会关闭循环。
  5. 尝试使用echo代替return,结果相同。
function link_recent_posts(){
    $text = "";
    $args = array('posts_per_page' => 2, 
                  'cat' => '144',);
    $q = new WP_Query($args);
    if($q->have_posts() ){
        while( $q->have_posts() ){
            $q->the_post();
            $text .= "<a href='".the_permalink()."'>".the_title()."</a><br>";
        }
        wp_reset_postdata();
    }
    return $text;
}
add_shortcode('TestRecentPosts', 'link_recent_posts');

预期结果应该是

<a href='LINK1'> TITLE TITLE TITLE </a><br>
<a href='LINK2'> TITLE TITLE TITLE </a><br>

我得到的结果是:

<div class="wordpress-content-section">
    <div class="clearfix"></div>
    LINK 1
    TITLE 1
    LINK 2
    TITLE 2
    <a href=""></a><br>
    <a href=""></a><br>
</div>

想象一下,链接和标题之间有0个空格。

Issue Resolved

  1. 删除退货
  2. 我没有增加$ text变量,而是为该行添加了回显。
  3. 我使用get_the_permalink()和get_the_title(),而不是使用the_permalink()和the_title()。

1 个答案:

答案 0 :(得分:0)

改为使用 get_the_permalink() get_the_title() the_permalink()和 the_title()直接回显结果。

查看

https://core.trac.wordpress.org/browser/tags/5.1.1/src/wp-includes/post-template.php#L0

https://developer.wordpress.org/reference/functions/the_permalink/