首页 > 解决方案 > Wordpress Post Meta 仅适用于循环中的一篇文章

问题描述

只有我创建的第一个帖子在此循环中提供了 url,我创建的所有后续帖子都没有将 url 显示为现有。

global $post;
$posts = get_posts(array(
    'post_type'   => 'logos',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'fields' => 'ids'
    )
);
echo "<div class='ssslider-{$slider['id']}'>";
foreach($posts as $p){

    $company_url = get_post_meta($p,"company_url",true);
    $title = get_the_title($p);
    $thumb_id = get_post_thumbnail_id($p);
    $thumb_url_array = wp_get_attachment_image_src($thumb_id, 'thumbnail-size', true);
    $thumb_url = $thumb_url_array[0];

    echo "<div style='margin:0px 40px;overflow:hidden;'><a href='{$company_url}' target='_blank'><img style='height:100px;' src='{$thumb_url}' alt='{$title}'/></a></div>";
}

echo "</div>";

标签: phpwordpress

解决方案


虽然这更常见WP_Query,但get_posts()应该可以正常工作。

看起来问题出在您使用get_post_meta().

第一个参数应该是Post ID,看起来你正在传递一个WP_Post Object

注意,get_post_thumbnail_id()get_the_title()应该使用 ID,但声明也接受 WP_Post 对象。

$posts = get_posts([
    'post_type'      => 'logos',
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'fields'         => 'ids'
]);

echo "<div class='ssslider-{$slider['id']}'>";
    foreach( $posts as $p ){
        $company_url = get_post_meta( $p->ID, 'company_url', true );
        $title       = get_the_title( $p->ID );
        $thumb_id    = get_post_thumbnail_id( $p->ID );
        $thumb_array = wp_get_attachment_image_src( $thumb_id, 'thumbnail-size', true );
        $thumb_url   = $thumb_array[0];

        echo "<div style='margin:0px 40px;overflow:hidden;'><a href='{$company_url}' target='_blank'><img style='height:100px;' src='{$thumb_url}' alt='{$title}'/></a></div>";
    }
echo "</div>";

推荐阅读