2016-03-21 5 views
1

私はこの問題があります。自分のカテゴリのカスタムページを作成しました。短く私はすべてのカテゴリを取得したいと思っているカテゴリでは、そのカテゴリに関連するすべての投稿をしたい。ショートカットを作成して各カテゴリのすべての投稿を表示する方法

function innovatiewerkplaats_sort($atts, $content = null){ 

    global $post; 

    $terms = get_terms('innovatiewerkplaats_categories'); // Get all terms of a taxonomy 

    $nieuws = ''; 

    foreach($terms as $term): 
     $nieuws .= '<div class="one"> 
         <h2>Thema <strong>'.$term->name.' id='.$term->term_id.'</strong></h2> 
        <div class="wrapper">'; 

     $category_query_args = array(
      'post_type' => 'innovatiewerkplaats', 
      // 'category' => $term->term_id, 
      'category_name' => $term->name, 
      // 'cat' => $term->term_id, 
     ); 

     query_posts($category_query_args); 

     if(have_posts()) : while (have_posts()) : the_post(); 

      $post_home= get_the_post_thumbnail($page->ID, 'post-home'); 
      $thumb = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), ''); 
      $url = $thumb['0']; 
      $excerpt = get_the_content(); 
      $excerpta = preg_replace("~(?:\[/?)[^/\]]+/?\]~s", '', $excerpt); 

      // $ter = wp_trim_words(apply_filters('rpwe_excerpt', $excerpta), $args['length'], '…'); 
      $nieuws .= '<a href="'.get_permalink().'" title="'.get_the_title().'" class="one_fourth workplace">'.$term->term_id.'<span class="img" style="background:url('.$url.') no-repeat center center; background-size:cover;"></span><span class="titel">'.get_the_title().'</span><p></p><span class="more">Lees meer</span></a>'; 

     endwhile; endif; 

     $nieuws .='</div></div>'; 

    endforeach; 

    return $nieuws; 
} 

答えて

2

注:query_postを使用しないでください。 WP_Queryまたはget_postsを使用してください。

When to use WP_query(), query_posts() and pre_get_postsをご覧ください。

ここでは、すべての投稿をカテゴリに基づいて生成するために問題に関連したサンプルアプローチを使用し、後でショートコードで表示します。関数の内部

  1. 、あなたは(wp_queryまたはget_postsを使用)最初のすべての記事を照会する必要があり、
  2. は、クエリのループ内ポストidでの関連カテゴリを取得します。用語タクソノミーの場合は、get_the_termsを使用します。
  3. キーを使用してクエリデータの配列を作成します(この例では、用語slugを使用して投稿をグループ化します)。
  4. これらのデータを外部ループ用に取り出し、 単純ループで出力します。
  5. ファンクションadd_shortcodeでショートコードを作成します(このコードは単純なショートコードのみを使用します)。

/** Shortcode [my_shortcode_posts] */ 
add_shortcode('my_shortcode_posts', 'so36133962_get_all_posts_by_category'); 

/** 
* All posts by category 
* build query by get_posts 
* 
* @return string|null 
*/ 
function so36133962_get_all_posts_by_category($attr, $content = null) 
{ 
    /** 
    * Build custom query 
    * 
    */ 
    $args = array(
     'post_type'  => 'your-post-type', // set your custom post type 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     /** add more arguments such as taxonomy query i.e: 

       'tax_query' => array(array(
        'taxonomy' => 'genre', // set your taxonomy 
        'field' => 'slug', 
        'terms' => array('comedy','drama') // set your term taxonomy 
       )) 
     */ 
    ); 

    $posts = new WP_Query($args); 

    /** 
    * Prepare Posts 
    * 
    */ 
    $result = array(); 

    // The Loop 
    if ($posts->have_posts()) 
    { 
     while ($posts->have_posts()) 
     { 
      $posts->the_post(); 
      /** 
      * Get all item in a term taxonomy 
      * 
      */ 
      $categories = get_the_terms(get_the_ID(), 'your-taxonomy' /* set your term taxonomy */); 
      if (! $categories) 
       continue; 

      foreach ($categories as $key => $category) 
      { 
       $term_name = $category->name; 
       $term_slug = $category->slug; 
       $term_id = $category->term_id; 
      } 

      /** 
      * Set thumbnail background cover 
      * Use Featured Image 
      */ 
      $img_cover = ''; 
      if (has_post_thumbnail()) 
      { 
       $image_url = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID())); 
       if (! empty($image_url[0])) 
       { 
        $img_cover = '<span class="img" style="background:url(' . esc_url($image_url[0]) . ') no-repeat center center; background-size:cover;">'; 
       } 
      } 

      /** 
      * Format html content 
      * 
      */ 
      $format = '<a href="%1$s" title="%2$s" class="post-%3$s">%4$s%2$s</span></br><span class="content-%3$s">%5$s</span></br><span class="more">%6$s</span></a>'; 

      /** 
      * Formatted string post content 
      * 
      */ 
      $content = sprintf($format, 
       get_permalink(), 
       get_the_title(), 
       get_the_ID(), 
       $img_cover, 
       get_the_excerpt(), 
       __('Read More', 'text-domain') 
      ); 

      /** 
      * Set an array of each post for output loop 
      * 
      */ 
      $result[ $term_slug ][] = array(
       'post_id'  => get_the_ID(), 
       'post_content' => $content, 
       'term_name' => $term_name, 
       'term_id'  => $term_id 
      ); 
     } 
    } 
    wp_reset_postdata(); // post reset 

    /** 
    * Check existing output 
    * 
    */ 
    if (! $result) 
     return; 

    /** 
    * Output loop 
    * 
    */ 
    $output = ''; 
    foreach ($result as $slug => $data) 
    { 
     $count = count($data); 
     for ($i = 0; $i < $count; $i++) 
     { 
      /** 
      * Set data as object 
      * 
      */ 
      $post = (object) array_map('trim', $data[ $i ]); 

      if (0 == $i) 
      { 
       /** 
       * Set category id and name 
       * 
       */ 
       $output .= '<div id="term-category-' . absint($post->term_id) . '">'; 
       $output .= '<h3>' . esc_html($post->term_name) . '</h3>'; 
      } 

      /** 
      * Set post id and content 
      * 
      */ 
      $output .= '<div id="post-' . absint($post->post_id) . '"><p>' . $post->post_content . '</p></div>'; 
     } 

     $output .= '</div>'; 
    } 

    return $output; // complete 
} 

あなたのニーズとして、素子構造を変更することができます。注記しておきますが、このコードでは、各カテゴリに投稿を重複させず、ポストタイプやタクソノミなどの値をコードにコメントとして変更するようにしてください。私はこれが役立つことを願っています

+0

コードのおかげでありがとう、コードの説明に感謝します!私は今日何かを学んだ:) – Nielsvandijkje

+0

@Nielsvandijkjeあなたは、あなたのプロジェクトで幸運を歓迎します。 – Jevuska

関連する問題