如何显示链接(标题)和缩略图帖子?

时间:2019-02-17 作者:R.M. Reza

我找到了这个相关的邮编here, 但是调用它的代码不完整,它只显示文章标题。如何显示链接和缩略图?

我真的希望有人能帮忙,因为这非常适合我想要的场景。

function get_max_related_posts( $taxonomy_1 = \'post_tag\', $taxonomy_2 = \'category\', $total_posts = 4 )
{
// First, make sure we are on a single page, if not, bail
if ( !is_single() )
    return false;

// Sanitize and vaidate our incoming data
if ( \'post_tag\' !== $taxonomy_1 ) {
    $taxonomy_1 = filter_var( $taxonomy_1, FILTER_SANITIZE_STRING );
    if ( !taxonomy_exists( $taxonomy_1 ) )
        return false;
}

if ( \'category\' !== $taxonomy_2 ) {
    $taxonomy_2 = filter_var( $taxonomy_2, FILTER_SANITIZE_STRING );
    if ( !taxonomy_exists( $taxonomy_2 ) )
        return false;
}

if ( 4 !== $total_posts ) {
    $total_posts = filter_var( $total_posts, FILTER_VALIDATE_INT );
        if ( !$total_posts )
            return false;
}

// Everything checks out and is sanitized, lets get the current post
$current_post = sanitize_post( $GLOBALS[\'wp_the_query\']->get_queried_object() );

// Lets get the first taxonomy\'s terms belonging to the post
$terms_1 = get_the_terms( $current_post, $taxonomy_1 );

// Set a varaible to hold the post count from first query
$count = 0;
// Set a variable to hold the results from query 1
$q_1   = [];

// Make sure we have terms
if ( $terms_1 ) {
    // Lets get the term ID\'s
    $term_1_ids = wp_list_pluck( $terms_1, \'term_id\' );

    // Lets build the query to get related posts
    $args_1 = [
        \'post_type\'      => $current_post->post_type,
        \'post__not_in\'   => [$current_post->ID],
        \'posts_per_page\' => $total_posts,
        \'fields\'         => \'ids\',
        \'tax_query\'      => [
            [
                \'taxonomy\'         => $taxonomy_1,
                \'terms\'            => $term_1_ids,
                \'include_children\' => false
            ]
        ],
    ];
    $q_1 = get_posts( $args_1 );
    // Count the total amount of posts
    $q_1_count = count( $q_1 );

    // Update our counter
    $count = $q_1_count;
}

// We will now run the second query if $count is less than $total_posts
if ( $count < $total_posts ) {
    $terms_2 = get_the_terms( $current_post, $taxonomy_2 );
    // Make sure we have terms
    if ( $terms_2 ) {
        // Lets get the term ID\'s
        $term_2_ids = wp_list_pluck( $terms_2, \'term_id\' );

        // Calculate the amount of post to get
        $diff = $total_posts - $count;

        // Create an array of post ID\'s to exclude
        if ( $q_1 ) {
            $exclude = array_merge( [$current_post->ID], $q_1 );
        } else {
            $exclude = [$current_post->ID];
        }

        $args_2 = [
            \'post_type\'      => $current_post->post_type,
            \'post__not_in\'   => $exclude,
            \'posts_per_page\' => $diff,
            \'fields\'         => \'ids\',
            \'tax_query\'      => [
                [
                    \'taxonomy\'         => $taxonomy_2,
                    \'terms\'            => $term_2_ids,
                    \'include_children\' => false
                ]
            ],
        ];
        $q_2 = get_posts( $args_2 );

        if ( $q_2 ) {
            // Merge the two results into one array of ID\'s
            $q_1 = array_merge( $q_1, $q_2 );
        }
    }
}

// Make sure we have an array of ID\'s
if ( !$q_1 )
    return false;

// Run our last query, and output the results
$final_args = [
    \'ignore_sticky_posts\' => 1,
    \'post_type\'           => $current_post->post_type,
    \'posts_per_page\'      => count( $q_1 ),
    \'post__in\'            => $q_1,
    \'order\'               => \'ASC\',
    \'orderby\'             => \'post__in\',
    \'suppress_filters\'    => true,
    \'no_found_rows\'       => true
];
$final_query = new WP_Query( $final_args );

return $final_query;
}
这是调用代码:

$query = get_max_related_posts();
if ( $query ) {

    while ( $query->have_posts() ) {
        $query->the_post();

        echo get_the_title() . \'</br>\';

    }
    wp_reset_postdata();
}

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

代码的第一部分负责构建查询并获取相关帖子。因此,如果这部分工作正常,您无需对其进行任何更改。

这是负责显示它们的部分:

$query = get_max_related_posts();
if ( $query ) {  // PS. This condition doesn\'t make any sense it should be $query->have_posts()...

    while ( $query->have_posts() ) {
        $query->the_post();

        echo get_the_title() . \'</br>\';

    }
    wp_reset_postdata();
}
正如你所看到的,只有标题在那里回响。

因此,如果要显示更多内容,必须根据需要更改此部分。下面是一个示例:

<?php 
    $query = get_max_related_posts();
    if ( $query->have_posts() ) :
?>
<ul>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <li>
        <a href="<?php the_permalink(); // <- this shows the url to the post ?>">
            <?php the_post_thumbnail( \'post-thumbnail\' ); // <- this shows the thumbnail ?>
            <?php the_title(); // <- this shows the title ?>
        </a>
    </li>
    <?php endwhile; wp_reset_postdata(); ?>
</ul>
<?php endif; ?>

相关推荐

Posts feed number of posts

祝大家节日快乐!我希望你能帮我解决这个“小”问题:)我正在使用基于Elara 它以不同的格式在首页和归档页上显示帖子提要。主要区别在于,在首页上,该设计最适合8篇文章,而在存档页上,它最适合导航前的10篇文章。但是,没有指定不同限制的选项。据我所知,饲料是由以下因素控制的:<?php /** * The loop / blog feed * * @package elara */ ?> <div id=\"blog