Wordpress get_posts() 仅显示用户个人资料中自定义 post 的部分正确数据

Wordpress get_posts() shows only partially correct data of custom post inside user profile

我有一个基于 wordpress 的网站,我正在尝试从中移动一些过去只是普通的自定义功能 mysql table 和一些代码到 insert/update/show 的东西.我正在尝试将其作为自定义 post 合并到 WP 中,以便我可以使用过滤器、标签、分页等。

它应该会在用户个人资料(最终会员)中显示一些自定义项目。例如,用户信息,然后是用户最喜欢的 10 个此类项目,然后是下一个选项卡上的 10 个其他类型的项目,等等。

但似乎事情在 WP 中并不那么简单,你不能只是把东西扔在彼此的顶部并期望它们不重叠。 >_> 因此,当我尝试添加具有自定义 post 类型数据的块时,它 returns 只有一些数据与配置文件数据混合在一起,并且没有任何内容。

是的,我明白了,据我从手册中了解到的,可能有一个配置文件循环和一些已经在变量中的数据。我不明白的是如何解决它。外观如下:

$args = array(
    'author'      => $uid,
    'numberposts' => 10,
    'post_type'   => 'ff',
);
$ff = get_posts($args);
if($ff){
    foreach($ff as $f){
        setup_postdata($f);
        the_content(); //shows what's needed, as well as ID, the_time() and some more
        the_title(); //shows author's name instead of post title
        the_tags(); //shows nothing, as well as excerpt, etc
        get_the_excerpt(); //still nothing
        $f->post_excerpt; //but this shows the excerpt, as well as print_r($f)
    }
    wp_reset_postdata();
}

也许有人可以提示我缺少什么?提前致谢!

尝试使用 post ID 获取您的数据并回显它。多一点代码,但可能会更好。

// Set the global post up here

global $post;

$args = array(
    'author'      => $uid,
    'numberposts' => 10,
    'post_type'   => 'ff',
);
$ff = get_posts($args);
if($ff){
    foreach($ff as $f){
        setup_postdata($f);
        $id = $f->ID; // get post ID
        $content = get_the_content($id); // get the content to echo later
        $tags = get_the_tags($id); // use to get tags, these are not part of the get_posts return object

        echo $content; // show the content

        echo $f->post_title; // show the returned post title. can use get_the_title($id) and echo it if this does not work
        
        // Display the tags after getting them above

        foreach ($tags as $tag) {
          echo $tag->name . ', ';
        }

        // You can get the excerpt this way too but you said your other worked okay

        $excerpt = get_the_excerpt($id); 
        echo $excerpt;
    }
    wp_reset_postdata();
}

(原文) 细说。这将设置全局 post 对象。这通常是您的函数在循环中工作的要求。多年来我发现情况并非总是如此,但如果您不在循环中使用 post ID 来获取数据,这是一个很好的做法。