使用Get_Categories显示类别的图像,或显示任何子帖子中的图像

时间:2014-02-19 作者:Jon

我正在使用get\\u categories列出父类别的子类别。

我想使用get\\u categories输出将图像添加到子类别。

我可以从我正在使用get\\u categories的类别的子类别(即父类别的子类别)的任何帖子中获取特色图像。我不想显示任何其他孙儿信息,只想从每组类别的孩子中获得一张特色图片我当前使用的代码是

$args = array(\'child_of\'  => 1  );
$categories = get_categories($args);
  foreach($categories as $category) { 
    echo \'<p>Category:\'. $category->name.\' </p> \';
    echo \'<p> Description:\'. $category->description . \'</p>\';
    echo PUT CAT IMAGE HERE;
     } 
或者我可以使用一些插件将图像添加到类别中,并在foreach($categories as $category) 输出
4 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

当过滤器打开时,这是可能的get_terms.

function grab_child_image($terms,$taxonomies,$args) {
  // var_dump($terms,$taxonomies,$args); // debug
  foreach ($terms as &$term) {
    $cp = new WP_Query(
      array (
        \'cat\' => $term->term_id,
        \'fields\' => \'ids\',
        \'ignore_sticky_posts\' => true
      )
    );
    // var_dump($cp->posts); // debug
    if ($cp->have_posts()) {
      $attach = new WP_Query(
        array (
          \'post_parent__in\' => $cp->posts,
          \'post_type\' => \'attachment\',
          \'post_status\' => \'inherit\',
          \'ignore_sticky_posts\' => true,
          \'posts_per_page\' => 1
        )
      );
      if ($attach->have_posts()) {
        $term->image = wp_get_attachment_image($attach->posts[0]->ID);
      } else {
        $term->image = \'some other image\';
      }
    }
  }
  return $terms;
}
add_filter(\'get_terms\',\'grab_child_image\',10,3);

$args = array(\'child_of\'  => 1  );
$categories = get_categories($args);
foreach($categories as $category) { 
  echo \'<p>Category:\'. $category->name.\' </p> \';
  echo \'<p> Description:\'. $category->description . \'</p>\';
  echo $category->image;
} 

remove_filter(\'get_terms\',\'grab_child_image\',10,3);
其中有多个查询,因此仅在需要时添加该筛选器,然后删除该筛选器。

a number of related image functions 你可以用它来代替,如果wp_get_attachment_image() 不能满足你的需要,你可以通过$size 参数到wp_get_attachment_image()-- 第二个参数——获取不同的图像大小。例如,将代码行替换为:

$term->image = wp_get_attachment_image($attach->posts[0]->ID, $size->full);
您可以进一步更改wp_get_attachment_image() 通过将过滤器应用于wp_get_attachment_image_attributes-- 例如,添加类as done here.

SO网友:Nicolai Grossherr

而不是使用get_categories(), 我建议你看看wp_list_categories(). 您可以使用它获得相同的输出,但它具有高度可定制的优点。

有两种自定义方法,一种是通过过滤器挂钩wp_list_categories - 看中source - 或者通过扩展Walker_Category 类别-请参见source. 后者为您提供了更多的定制可能性,但对于一些小的更改,可能会超出范围。所以你必须评估什么最适合你的需要。

因为这个主题实际上已经在WPSE中得到了很好的介绍,所以我只给你一个参考文献的简短列表。除此之外,你还没有对你的需求做出足够具体的描述,虽然人们可以知道你想要什么,但它仍然有点模糊。无论如何,下面的资源应该可以帮助您选择适合您的方法,并且还应该使您能够实现它。

过滤器挂钩wp_list_categories

  • Walker_Category 等级
    • wp_list_categories: get latest featured_image of category
    • How can I make wp_list_categories output li with category-slug as class, for its children?
    • How to display a category list in a mediawiki like way? Walker_Category 类方法,但对于所需更改非常小的情况。这当然有点个人偏好,但也有一定的背景,特别是因为可重用性、可扩展性,而且——即使看起来没有必要——毕竟它经常——甚至大多数时候——是实现自定义输出的更简单方法

      <小时>Thumbnail from post in child category:

      这样,您可以从属于其中一个子类别的随机帖子中检索“类别缩略图”

      我已经对代码进行了注释,以使您能够理解这是如何完成的,此外,它应该是非常不言自明的。

      /**
       * wpse135208_cat_thumb_from_random_child.
       *
       * Get the thumbnail from a random post belonging to one of the child categories.
       *
       * @version 0.1
       *
       * @link https://wordpress.stackexchange.com/q/135208/22534
       *
       * @param integer $c_cat (default: \'\')
       * @param string/array $size (default: \'post-thumbnail\')
       * @param string/array $attr (default: null)
       *
       * @return string
       */
      function wpse135208_cat_thumb_from_random_child( $c_cat = \'\', $size = \'post-thumbnail\', $attr = null ) {
          // do nothing if $c_cat is empty
          if( empty($c_cat) ) return;
          // get_terms is used because we only need ids
          $taxonomies = array(
              \'category\'
              );
          $args = array(
              \'child_of\' => $c_cat,
              \'fields\' => \'ids\'
              );
          // returns an array of ids
          $child_cats = get_terms( $taxonomies, $args );
          // use this for debugging
          //echo \'<pre>\'; print_r($child_cats); echo \'</pre>\';
      
          $args = array(
              // we use numberposts instead of post_per_page,
              // because if the pre_get_posts filter is used,
              // it can make a difference in this case 
              // we only want one post
              \'numberposts\' => 1,
              // but we randomize this
              \'orderby\' => \'rand\',
              \'category__in\' => $child_cats,
              \'fields\' => \'ids\',
              // make sure only posts with featured image are considered
              \'meta_query\' => array(
                  array(
                      \'key\' => \'_thumbnail_id\',
                      \'compare\' => \'EXISTS\'
                  )
              )
              );
          // returns an array containing one post id
          $ct_p_id = get_posts( $args );
          // use this for debugging
          //echo \'<pre>\'; print_r($ct_p_id); echo \'</pre>\';
      
          // use this for debugging
          //echo \'<pre>\'; print_r( ( 1 /*change to 0 to show src info*/ ) ? get_the_post_thumbnail( $ct_p_id[0], $size, $attr ) : wp_get_attachment_image_src( get_post_thumbnail_id( $ct_p_id[0] ) ) ); echo \'</pre>\'; 
          // now we can use this to return our thumbnail
          return get_the_post_thumbnail( $ct_p_id[0], $size, $attr );
      }
      
      用法如下:

      echo wpse135208_cat_thumb_from_random_child( \'1\', \'thumbnail\', null );
      
      在代码中使用它,如下所示:

      $categories = get_categories($args);
      foreach($categories as $category) { 
          echo wpse135208_cat_thumb_from_random_child($category->cat_ID); 
      } 
      

      <小时>Category thumbnail via plugin:

      这样做的好处是具有实际的类别缩略图

      我给了插件-Category Thumbnails - 我在上面的评论中提到了一个快速测试。一般来说,这是可行的,我觉得这是一个比你在回答中提出的更好的解决方案,因为它可以让你通过wordpress媒体库管理缩略图。

      我发现了一个小错误,插件作者是notified 并立即回复,因此该错误将很快得到修复。如果你等不及了,你可以像这样自己修复它:

      然而,功能

      the_category_thumbnail();
      
      不产生输出。在版本1.0.3的源代码中如下所示:

      function the_category_thumbnail($category_id = null, $sizes = array()) {
          print get_the_category_thumbnail($cat, $sizes);
      }
      
      我成功地解决了以下问题:

      function the_category_thumbnail($category_id = null, $sizes = array()) {
          print get_the_category_thumbnail($category_id, $sizes);
      }
      
      因此,通过使参数/参数名称相等。

      或者你只是使用get_the_category_thumbnail() 相反,你只需要echo 信息技术:

      echo get_the_category_thumbnail(\'1\');
      
      另一个小小的失望是,它提供的插件和函数无法让您处理生成的图像大小。这不太好,因为我们想要的是正确的尺寸,而不是全尺寸。我也会通知作者,这样他可以进一步改进他的插件。同时,幸运的是,可以通过构造自定义函数轻松解决这一问题:

      /**
       * wpse135208_cat_thumb_wrapper.
       *
       * Wrapper function to have the ability to use predefined image sizes via wp_get_attachment_image().
       *
       * @version 0.1
       *
       * @link https://wordpress.stackexchange.com/q/135208/22534
       *
       * @param integer $category_id (default: null)
       * @param string/array $size (default: \'thumbnail\')
       * @param boolean $icon (default: false)
       * @param string/array (default: null)
       *
       * @return string
       */
      function wpse135208_cat_thumb_wrapper( $category_id = null, $size = \'thumbnail\', $icon = false, $attr = null ) {
          $category_thumbnail_obj = get_the_category_data( $category_id );
          return wp_get_attachment_image( $category_thumbnail_obj->id, $size, $icon, $attr );
      }
      
      用法如下:

      echo wpse135208_cat_thumb_wrapper( \'1\', \'thumbnail\', false, null );
      
      这应该可以帮助您实现这一目标。正如我所说,这是最好的,因为您可以通过媒体库管理类别缩略图。在代码中使用它,如下所示:

      $categories = get_categories($args);
      foreach($categories as $category) { 
          echo wpse135208_cat_thumb_wrapper($category->cat_ID); 
      } 
      

  • SO网友:socki03

    好吧,我成功地用Advanced Custom Fields, 使用一个image 自定义字段。从这里开始,将位置规则设置为“分类术语”>“等于”>“类别”(或您使用此术语的任何分类法)。

    发布后,它应使用图像的新字段更新分类法的编辑位置。现在,只需在类别foreach循环中使用ACF函数“get\\u field()”。Here\'s how you get field from the category.

    示例:

    <?php foreach ( $categories as $category ) {
        echo get_field(\'field_name_for_image\', $category->taxonomy . "_" . $category->term_id);
    } ?>
    
    如果使用了ACF的默认设置,则应该从中获取一个数组,即图像对象,对于该对象,请阅读Image Field Types 来自ACF。

    这花了我<;5分钟来设置,插件是免费的。我希望这对你来说又快又容易!

    祝你好运!

    SO网友:Jon

    Wordpress的代码为-http://codex.wordpress.org/Function_Reference/get_the_category

         Show Category Images
    This outputs category images named after the cat_ID with the alt attribute set to cat_name. You can also use any of the other member variables instead.
    
    <?php 
    foreach((get_the_category()) as $category) { 
        echo \'<img src="http://example.com/images/\' . $category->cat_ID . \'.jpg" alt="\' . $category->cat_name . \'" />\'; 
    } 
    ?>
    
    这允许在get\\u categories函数中设置图像。必须设置图像以匹配功能。因此,如果使用$category->name,则图像必须与类别的匹配名称保存在正确的文件夹中。

    结束

    相关推荐

    具有自定义分类的自定义帖子类型中的WP_DROPDOWN_CATEGORIES

    我有一个自定义的帖子类型,它有自己的分类法,基本上“show Vinces”是帖子类型,Vincement regions是分类法。看到一个场馆无法在多个地区存在,我删除了默认的metta框,并使用wp_dropdown_categories(). 分类法项目正在输出并按我所希望的方式显示,但它们不会被提交,并且下拉列表在提交后不会保留所选内容。我已经尽我所能地查看原始metabox的各种属性,并尝试将这些属性应用到下拉列表中,但到目前为止,我没有任何乐趣。我看过一些various WPSE上的帖子和ha