2016-03-21 18 views
1

Bu sorunu yaşıyorum: kendi kategorileri grubuyla özel bir sayfa hazırladım. Bir kısa kodda tüm kategorileri almak istiyorum ve kategorilerde bu kategoriyle ilgili tüm yazıları istiyorum.Her bir kategorideki tüm mesajları görüntülemek için kısa kod nasıl oluşturulur

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; 
} 

cevap

2

Not: query_post'u kullanmayın. WP_Query veya get_posts kullanın.

Lütfen bir tartışma konusuna bakın: When to use WP_query(), query_posts() and pre_get_posts.

Sayfanızdaki tüm yayınlar tabanını oluşturmak için sorununuzla ilgili örnek yaklaşımı, sonra da daha sonra kullanmak için kısa kodla görüntüleyin. Bir Fonksiyonun içerisinde

  1. , sen
  2. sorgu döngü içine sonrası kimliği ile ilgili kategoriyi alın, (wp_query veya get_posts kullanın) ilk gönderilen tüm mesajları sorgulaması gerekir. Taksonomi terimi ise get_the_terms'u kullanın.
  3. İletileri gruplamak için anahtarlı bir sorgu verisi dizisi oluşturun (bu durumda, terimli terim kullanırız).
  4. Sonra bu verileri dış döngü için alın ve basit döngü ile çıktı.
  5. add_shortcode numaralı telefona göre bir kısa kod oluşturun (bu kod sadece basit bir kısa kod kullanır).

/** 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 
} 

İhtiyaçlarınıza olarak eleman yapılarını değiştirebilir. Not olarak, bu kodla birlikte, her bir kategoride çift gönderi yok ve kodda yorumlandığı gibi posta türü ve taksonomi gibi değerleri değiştirdiğinizden emin olun. Umarım bu yardımcı olur.

+0

Kod için teşekkürler ve kodun açıklaması için teşekkürler! Bugün bir şey öğrendim :) – Nielsvandijkje

+0

@Nielsvandijkje, projenizde iyi şanslar. – Jevuska