提问者:小点点

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


所以基本上,我创建了一个小函数,从WordPress获取某个类别的最新帖子,并将它们链接到一个测试页面中。函数本身工作,从这个stackexchange线程抓取它。我的while循环设置当前忽略了我尝试返回的所有HTML/CSS。

  1. 删除_post()会忽略$args并列出所有类别中的所有帖子,而不只是我列出的那个,但仍然会忽略HTML。
  2. 删除wp_reset_postdata()并没有像我所看到的那样起到什么作用,也不能解决我的问题。
  3. 添加
    或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个空格。

问题已解决

  1. 删除了返回
  2. 我没有增加$text变量,而是为该行添加了一个回显。
  3. 我没有使用_permalink()和_title(),而是使用了get_the_permalink()和get_the_title()。

共1个答案

匿名用户

改用get_the_permalink()和get_the_title()。permalink()和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/

相关问题