从属于特定分类的帖子中随机获取缩略图

时间:2013-11-12 作者:Jeremy Miller

我有一种感觉,我走在了正确的轨道上,我只是没有足够扎实的PHP知识,无法比我目前所处的位置走得更远。

我当前使用以下代码从单个类别返回子类别列表:

<?php
    $taxonomyName = "category";
    $terms = get_terms($taxonomyName,array(\'parent\' => 79));
    echo \'<ul>\';
    foreach($terms as $term) {
        echo \'<li>\';
        echo \'<a href="\'.get_term_link($term->slug,$taxonomyName).\'">\'.$term->name.\'</a><br/>\';

        $thumbnails = get_posts(\'numberposts=1&orderby=rand\');
        foreach ($thumbnails as $thumbnail) {
        echo \'<a href="\' . get_permalink( $thumbnail->ID ) . \'" title="\' . esc_attr( $thumbnail->post_title ) . \'">\';
            if ( has_post_thumbnail($thumbnail->ID)) {
                echo get_the_post_thumbnail($thumbnail->ID, \'thumbnail\');
            } else {
            echo \'no thumbnail\';    
        }
        echo \'</a>\';
        }
        echo \'<li>\';
    }
    echo \'</ul>\';
?>
此代码在某种程度上起作用。它返回父项ID 79下所有六个子类别的列表。但是,我还想在6个子类别的每个列表项中返回一个随机缩略图。

不幸的是,这段代码从我所有的帖子中返回一个随机缩略图,而不仅仅是ID 79和它的特定子级。我需要它从父目录中返回的同一类别中返回一个缩略图<li>.

有什么简单的方法可以做到这一点吗?我想我需要对该数组进行排序,并在嵌套的foreach循环中返回类别。我只是不知道怎么做。

提前感谢您的帮助!

3 个回复
SO网友:Jeremy Miller

所以为了做到这一点,我需要首先对每个循环执行一个,将类别slug存储为一个变量,JAMterm, 然后在查询中使用它从类别中随机抽取一个缩略图。

幸亏@Renishkhunt 感谢你一直以来帮助我得到这个答案。

<?php
    $taxonomyName = "category";
    $terms = get_terms($taxonomyName,array(\'parent\' => 79));
    echo \'<ul>\';
    foreach($terms as $term) {
        echo \'<li><a href="\'.get_term_link($term->slug,$taxonomyName).\'">\'.$term->name.\'</a><br/>\';

        $JAMterm = $term->slug;

        global $wp_query;
        $term = $wp_query->queried_object;

        $args=array(
            \'orderby\' => \'rand\',
            \'posts_per_page\' => 1,
            \'post_type\' => \'post\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'category\', 
                    \'field\' => \'slug\', 
                    \'terms\' =>  $JAMterm
                )
            )
        );

        $new_query = null;
        $new_query = new WP_Query($args);

        while ($new_query->have_posts()) : $new_query->the_post();
            the_post_thumbnail(); 
        endwhile;
        wp_reset_postdata();


        echo \'</li>\';
        }
    echo \'</ul>\';
?>

SO网友:Renish Khunt

您还可以使用随机播放功能显示随机子类别。

<?php
$term_id = 97;
$taxonomy_name = \'category\';
$terms = get_term_children( $term_id, $taxonomy_name );

echo \'<ul>\';
shuffle($terms);
for($i = 0 ;$i < 1; $i++ ){
    echo \'<li>\';
    echo \'<a href="\'.get_term_link($terms[$i]->slug,$taxonomyName).\'">\'.$terms[$i]->name.\'</a><br/>\';
        $thumbnails = get_posts(\'numberposts=1&orderby=rand\');
         foreach ($thumbnails as $thumbnail) {
            if ( has_post_thumbnail($thumbnail->ID)) {
                   echo get_the_post_thumbnail($thumbnail->ID, \'thumbnail\');
            } else {
                   echo \'<a href="\' . get_permalink( $thumbnail->ID ) . \'" title="\' . esc_attr( $thumbnail->post_title ) . \'">\';
                   echo \'no thumbnail\';    
                   echo \'</a>\';
            }
          }
   echo "</li>";       
}

echo \'</ul>\';
?> 
我希望这段代码完全用于您。

这是返回随机子类别。

非常感谢。

SO网友:Luca Reghellin

由于您只需要随机缩略图,而不是所有POST数据,因此可以使用这样的直接查询(#请设置实际表名或使用$wpdb->prefix):

SELECT 
    m.meta_value
FROM 
    wp_posts p 
    INNER JOIN wp_postmeta m ON m.post_id = p.ID
    INNER JOIN wp_term_relationships rel ON p.ID = rel.object_id
    INNER JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = rel.term_taxonomy_id
    INNER JOIN wp_terms t ON tt.term_id = t.term_id
WHERE 
    p.post_type = \'your post type\'  # please set as needed 
    AND p.post_status = \'publish\'
    AND m.meta_key = \'_thumbnail_id\'
    AND t.slug in (\'your slug list\') # please set as needed
    #AND t.term_id in (\'yout id list\') # alternative: a list of term ids
ORDER BY RAND()
LIMIT 1
您将从属于特定分类法或类别的特定术语的已发布帖子列表中获得1个帖子缩略图ID。然后使用wp_get_attachment_image_url() 或WP提供的其他一些附件相关功能。

一般来说,当没有本地wordpress函数来检索数据时,我认为最好花些时间构建一个自定义查询,因为它通常更快,然后可以将其嵌入到一些实用函数中,以便在需要时再次使用。

结束

相关推荐

在自定义帖子类型下显示帖子的URL和名称的PHP代码

我在我的页脚(循环外)中展示了一篇来自自定义帖子类型的帖子,并使用高级自定义字段插件来实现这一点。这是我正在使用的代码:<h5>Featured Movie</h5> <?php query_posts(array( \'posts_per_page\' => 1, \'post_type\' => \'movies\', \'orderby\' => \'post_date\', \'meta_key\' =>