Wordpress:通过'类别'获取图像分类

时间:2015-01-07 12:33:47

标签: php wordpress

我有以下代码,我试图按类别获取图像,我有一个类别名称“home-hero”,当我将它添加到下面的代码中时,它仍然显示媒体中的所有图像。

我怎样才能让它只显示家庭英雄下的所有图像?

<?php
function get_images_from_media_library() {
  $args = array(
    'taxonomy' => 'home-hero',
    'post_type' => 'attachment',
    'post_mime_type' =>'image',
    'post_status' => 'inherit',
    'order'    => 'DESC'
  );
  $query_images = new WP_Query( $args );
  return $query_images;
}

function display_images_from_media_library() {
  $imgs = get_images_from_media_library();
  $html = '<div id="media-gallery">';
  global $post;
  if ($imgs->have_posts()) {
    while($imgs->have_posts()) {
      $imgs->the_post();
      $html .= '<img src="' . $post->guid . '" alt="" />';
      $html .=  get_the_date('F j, Y');
    }
  }
  $html .= '</div>';
  return $html;
}
echo display_images_from_media_library();
?>

感谢您抽出宝贵时间做好准备。

2 个答案:

答案 0 :(得分:1)

正如我所说,我有一个工作不完整的解决方案,我需要完成一个项目。

问题是,附件没有类别,只有他们的父母有,所以用简单的查询来获取特定类别的附件是不可能的

您需要在此处运行两个查询,第一个查询将获取给定类别中的所有父帖子,第二个查询将使用父帖子ID来获取来自所有父帖子的附件< / p>

在这两个查询中,您只需要获取帖子ID字段,这将大大加快您的查询速度,并且您将使用返回的附件ID($attachments->posts)和wp_get_attachment_image()

关于代码的几点说明

  • 此代码旨在进入函数,$post_type$taxonomy$term应该动态检索。您可以将值硬编码为这三个变量,也可以在函数中使其动态化

  • 您不需要使用tax_query,如果您使用内置分类category,则只需使用类别参数即可。我刚刚使用了tax_query,因此可以将函数用于任何分类。如果您将tax_query保留为内置类别,请记住,分类标准为category,术语将为类别ID(我将字段设置为term_id

  • 此代码至少需要PHP 5.4。如果您的版本低于5.4,只需将数组包装器[]更改为array()

以下是代码:

$args1 = [
    'posts_per_page' => -1,
    'fields'         => 'ids',
    'post_type'      => $post_type,
    'tax_query' => [
        [
            'taxonomy'          => $taxonomy,
            'field'             => 'term_id',
            'terms'             => $term,
            'include_children'  => false
        ],
    ],  
];
$post_parents = new WP_Query($args1); 

if( $post_parents->posts ) {    

    $args = [
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'post_status'    => 'inherit',
        'fields'         => 'ids',
        'posts__in'      => $post_parents->posts,
    ];
    $attachments = new WP_Query($args); 

}
?><pre><?php var_dump($attachments->posts); ?></pre><?php

希望这可以帮助您完成项目

答案 1 :(得分:0)

你可以这样:

<?php
$images = get_posts( array('post_type' => 'attachment', 'category__in' => array(cat_ids))  );
if ( !empty($images) ) {
    foreach ( $images as $image ) {
        echo wp_get_attachment_image($image->ID).'<br />';
        echo $image->post_title .'<br />';
        the_attachment_link( $image->ID, true );
    }
}
?>

希望这会有所帮助......