สร้างตัวกรอง (Filter) ให้ Custom Post Types


เคนเจอปัญหาตอนนี้ก็คือในกรณีที่สร้าง Custom Post Types ขึ้นมาด้วยปลั๊กอิน Custom Post Type UI แล้ว ก็พบว่าทำยังไงมันก็ไม่มีตัวกรองให้เราเหมือนในเรื่องอ่ะ

ก็ไปเจอโค้ดที่มีคนทำไว้ให้แล้ว ก็เลยเอามาแบ่งกันเลยดีกว่า จะได้ง่าย ๆ ขอบคุณวิธีทำจาก GenerateWP ครับ

ตัวอย่างนี้เคนสร้าง Custom Post Types ชื่อว่า คลังความรู้ (post type slug: knowledgebase) และ หมวดหมู่ของมัน (slug: klbcategory)

ตอนนี้ก็จะเห็นว่ามันไม่มี ตัวกรองของหมวดหมู่ให้เราอ่ะ อยากได้ตัวกรองตรงนี้ด้วย!!


ก็ไปเพิ่มโค้ดชุดนี้ที่ธีม หรือปลั๊กอินได้ตามสบายเลยครับ ส่วนของเคนเองจะเพิ่มต่อท้ายไว้ในไฟล์ functions.php ในธีมที่ใช้

function filter_knowledgebase_by_taxonomies( $post_type, $which ) {

  // ถ้าไม่ใช่ Post type ที่เราต้องการก็ไม่ต้องทำอะไร
  if ( 'knowledgebase' !== $post_type ) return;

  // เลือก taxonomies ที่ต้องการสร้างตัวกรอง
  $taxonomies = array( 'klbcategory' );

  foreach ( $taxonomies as $taxonomy_slug ) {

    // รับค่า taxonomies
    $taxonomy_obj = get_taxonomy( $taxonomy_slug );
    $taxonomy_name = $taxonomy_obj->labels->name;

    // รับค่า taxonomy terms
    $terms = get_terms( $taxonomy_slug );

    // สร้างตัวกรอง
    echo "<select name='{$taxonomy_slug}' id='{$taxonomy_slug}' class='postform'>";
    echo '<option value="">' . sprintf( esc_html__( '%sทั้งหมด', 'text_domain' ), $taxonomy_name ) . '</option>';
    foreach ( $terms as $term ) {
      printf(
        '<option value="%1$s" %2$s>%3$s (%4$s)</option>',
	$term->slug,
	( ( isset( $_GET[$taxonomy_slug] ) && ( $_GET[$taxonomy_slug] == $term->slug ) ) ? ' selected="selected"' : '' ),
	$term->name,
	$term->count
      );
    }
    echo '</select>';
  }
}

// ใช้ action ชื่อ restrict_manage_posts
add_action( 'restrict_manage_posts', 'filter_knowledgebase_by_taxonomies' , 10, 2);

ตอนนี้มันก็จะแสดงตัวกรองออกมาแล้วววววว

Leave a Reply

Please Login to comment
avatar
  Subscribe  
Notify of
Navigate