گسترش پست ها در وردپرس: بخش دوم – طبقه بندی سفارشی

ایجاد طبقه بندی سفارشی

طبقه بندی ها روشی برای دسته بندی موجودیت ها در وردپرس هستند. مجموعه (category)، تگ (post tag)، دسته بندی لینک (link category) و منو (Nav Menu) از جمله طبقه بندی ها پیش فرض وردپرس هستند. برای درک عملکرد طبقه بندی ها، باید هر طبقه بندی را به صورت مجموعه ای از واژگان یا اصطلاحات (terms) در نظر گرفت. هر واژه در طبقه بندی مختصاتی از ویژگی های آن پست (موجودیت) در طبقه بندی را تعریف می کند.

به عنوان مثال کاربران می خواهند از نوع پست music album برای سازماندهی مجموعه ای از آلبوم های موسیقی شان استفاده نمایند. هر پست به عنوان یک آلبوم فرض می شود. احتمالا کاربران نیاز خواهند داشت که مجموعه آهنگ ها را با دسته بندی آلبوم ها در طبقه بندی های مشخص سازماندهی نمایند. برخی از طبقه بندی های محتمل برای آلبوم ها شامل هنرمند (artist)، سبک (genre)، قالب (format) و استودیوی تولید کننده (studio) خواهد بود. هر یک از این طبقه بندی ها کاربران را قادر می سازد تا اطلاعات بیشتری در مورد محتوای آلبوم ها را تعریف نمایند.

ثبت یک طبقه بندی

از تابع register_taxonomy برای ثبت یک طبقه بندی جدید و تعریف چگونگی مدیریت آن در وردپرس استفاده می شود. این تابع سه پارامتر ورودی می پذیرد: پارامتر اول نام طبقه بندی، پارامتر دوم یک موجودیت یا آرایه ای از موجودیت ها که به طبقه بندی اضافه می گردند و پارامتر سوم آرایه ای از آرگومان هایی که مدیریت طبقه بندی را تعریف می کنند.

< ?php
register_taxonomy( $taxonomy, $object_type, $args );
? >    

برخی از مهمترین آرگومان های پارامتر سوم این تابع (آرایه $args) که برای تعریف طبقه بندی مورد نیاز است شامل موارد زیر می باشد:

Public: تعیین کننده امکان پرس و جوی طبقه بندی در سایت است. مقدار پیش فرض: true

Show_ui: آیا بخش مدیریت طبقه بندی به مدیریت وردپرس اضافه گردد؟ مقدار پیش فرض معادل مقدار public است.

Hierarchical: آیا واژگان این طبقه بندی به صورت سلسله مراتبی است یا نه؟ در صورتی که مقدار true باشد، واژگان این طبقه بندی دارای والد خواهند بود. مقدار پیش فرض این آرگومان false است.

Query_var: نام متغیر پرس و جو برای واژگان طبقه بندی.

Rewrite: برای ایجاد ساختار آدرس لینک صفحات طبقه بندی استفاده می شود و سه مقدار true، false یا آرایه ای از پارامترها را می پذیرد. مقدار true باعث ایجاد آدرس لینک براساس نام طبقه بندی و نام مستعار واژگان می گردد. مقدار false ایجاد ساختار آدرس لینک را منتفی می سازد. آرایه این آرگومان می تواند شامل کلیدهای زیر باشد:

  • With_front: آیا پیشوند آدرس دهی در سایت برای آدرس دهی طبقه بندی استفاده شود؟
  • Slug: رشته ای یکتا که پیش از نام مستعار واژه در آدرس لینک استفاده می شود.
  • Hierarchical: آیا واژگان همراه با والدشان باید در آدرس دهی واژگان استفاده شوند؟ مقدار پیش فرض: false

Update_count_callback: نام تابعی که هنگام بروزرسانی تعداد واژگان (معمولا در وقت ذخیره پست) فراخوانده می شود.

Show_tagcloud: آیا این طبقه بندی می تواند در ویجت تگ های وردپرس نمایش داده شود؟ پیش فرض: مقدار آرگومان show_ui

Show_in_nav_menus: آیا واژگان طبقه بندی به بخش منوهای وردپرس می تواند اضافه گردد؟

Labels: برچسب متونی که اغلب برای نمایش اطلاعات طبقه بندی و واژگان استفاده می شوند. این آرگومان آرایه ای از رشته متن هاست که شامل کلیدهای زیر است:

  • Name: نام طبقه بندی در حالت جمع
  • Singular_name: نام طبقه بندی در حالت جمع
  • Search_items: متنی نمایشی برای جستجوی واژگان طبقه بندی
  • Popular_items: متن نمایشی برای واژگان محبوب طبقه بندی
  • All_items: متن لینک مشاهده تمامی واژگان طبقه بندی
  • Parent_item: متن نمایشی برای یک واژه والد
  • Parent_item_colon:
  • Edit_item: متن ویرایش واژه
  • Update_item: متن بروزرسانی واژه
  • Add_new_item: متن نمایشی ایجاد واژه
  • New_item_name: متن نمایشی ایجاد نام واژه
  • Separate_items_with_comma: جمله ای که در مورد جداسازی هر واژه با کاما توضیح می دهد
  • Add_or_remove_items: جمله ای که در زمان غیرفعال بودن جاوااسکریپت در مورد حذف و اضافه واژگان اطلاع می دهد.
  • Choose_from_most_used: جمله ای که کاربران را در مورد انتخاب پرکاربردترین واژگان راهنمایی می کند.

Capabilities: از این آرگومان برای کنترل مجوز اجرای قابلیت های واژگان طبقه بندی توسط کاربران استفاده می شود. این آرایه شامل کلیدهای زیر است:

Manage_terms: اجازه مدیریت واژگان را به کاربران می دهد.

Edit_terms: امکان ویرایش واژگان را به کاربران می دهد.

Delete_terms: مجوز حذف واژگان را مشخص می کند.

Assign_terms: امکان تخصیص واژگان طبقه بندی به یک پست را فراهم می کند.

مثال: ایجاد دو طبقه بندی جدید با نام album_artist و album_genre برای پست های از نوع music_album

< ?php
             
/* Set up the taxonomies. */
add_action( ‘init’, ‘bmpt_music_collection_register_taxonomies’ );
             
/* Registers taxonomies. */
function bmpt_music_collection_register_taxonomies() {
             
    /* Set up the artist taxonomy arguments. */
    $artist_args = array(
        ‘hierarchical’ = >  false,
        ‘query_var’ = >  ‘album_artist’,
        ‘show_tagcloud’ = >  true,
        ‘rewrite’ = >  array(
            ‘slug’ = >  ‘music/artists’,
            ‘with_front’ = >  false
        ),
        ‘labels’ = >  array(
            ‘name’ = >  ‘Artists’,
            ‘singular_name’ = >  ‘Artist’,
            ‘edit_item’ = >  ‘Edit Artist’,
            ‘update_item’ = >  ‘Update Artist’,
            ‘add_new_item’ = >  ‘Add New Artist’,
            ‘new_item_name’ = >  ‘New Artist Name’,
            ‘all_items’ = >  ‘All Artists’,
            ‘search_items’ = >  ‘Search Artists’,
            ‘popular_items’ = >  ‘Popular Artists’,
            ‘separate_items_with_commas’ = >  ‘Separate artists with commas’,
            ‘add_or_remove_items’ = >  ‘Add or remove artists’,
            ‘choose_from_most_used’ = >  ‘Choose from the most popular artists’,
        ),
    );
             
    /* Set up the genre taxonomy arguments. */
    $genre_args = array(
        ‘hierarchical’ = >  true,
        ‘query_var’ = >  ‘album_genre’,
        ‘show_tagcloud’ = >  true,
        ‘rewrite’ = >  array(
            ‘slug’ = >  ‘music/genres’,
            ‘with_front’ = >  false
        ),
        ‘labels’ = >  array(
            ‘name’ = >  ‘Genres’,
            ‘singular_name’ = >  ‘Genre’,
            ‘edit_item’ = >  ‘Edit Genre’,
            ‘update_item’ = >  ‘Update Genre’,
            ‘add_new_item’ = >  ‘Add New Genre’,
            ‘new_item_name’ = >  ‘New Genre Name’,
            ‘all_items’ = >  ‘All Genres’,
            ‘search_items’ = >  ‘Search Genres’,
            ‘parent_item’ = >  ‘Parent Genre’,
            ‘parent_item_colon’ = >  ‘Parent Genre:’,
        ),
    );
             
    /* Register the album artist taxonomy. */
    register_taxonomy( ‘album_artist’, array( ‘music_album’ ), $artist_args );
             
    /* Register the album genre taxonomy. */
    register_taxonomy( ‘album_genre’, array( ‘music_album’ ), $genre_args );
}
             
? >

برای ثبت درست طبقه بندی، باید تابع مورد نظر با هوک init فراخوانده شود.

تخصیص یک طبقه بندی به یک نوع پست

برای تخصیص یک طبقه بندی ثبت شده به یک یا چند نوع از پست از تابع register_taxonomy_for_object_type    می شود. این تابع دو پارامتر ورودی می پذیرد: پارامتر اول نام طبقه بندی و پارامتر دوم نام نوع پستی که طبقه بندی باید به آن تخصیص یابد. در صورت اجرای موفق این تابع مقدار true و در غیر این صورت مقدار false برگردانده می شود.

< ?php
             
/* Adds the post_tag taxonomy to the page post type. */
register_taxonomy_for_object_type( ‘post_tag’, ‘page’ );
             
? >     

در مثال فوق، طبقه بندی تگ به نوع پست page تخصیص می یابد.

استخراج اطلاعات یک طبقه بندی

تابع get_taxonomy برای دریافت اطلاعات طبقه بندی از دیتابیس استفاده می شود. این تابع نام طبقه بندی را به عنوان پارامتر ورودی می پذیرد و اطلاعات طبقه بندی را در قالب یک شی از کلاس wp_taxonomy برمیگرداند.

< ?php
             
/* Get the genre taxonomy object. */
$genre = get_taxonomy( ‘album_genre’ );
             
/* Display the singular name of the genre taxonomy. */
echo $genre- > labels- > singular_name;
             
? >

استخراج اطلاعات واژگان یک پست

تابع the_terms لیستی از واژگان یک پست از یک طبقه بندی معین را به نمایش در می آورد. این تابع پنج پارامتر ورودی می پذیرد: پارامتر اول آیدی پست، پارامتر دوم نام طبقه بندی، پارامتر سوم محتوایی که پیش از لیست نمایش داده می شود، پارامتر چهارم جداکننده واژگان و پارامتر پنجم محتوایی که پس از لیست به نمایش در می آید.

مثال: نمایش لیستی از مجموعه های یک پست

<?php 
the_terms( $post->ID, 'category', 'categories: ', ' / ' ); 
?>

تابع فوق برای نمایش لیستی از واژگان یک پست و طبقه بندی استفاده می شود اما اگر بخواهیم به اطلاعات واژگان یک پست دسترسی یابیم باید از تابع get_the_terms استفاده کنیم. تابع get_the_terms دو پارامتر ورودی می پذیرد:

پارامتر اول آیدی یا شی پست و پارامتر دوم نام طبقه بندی. در صورت وجود واژگان برای پست آرایه ای از اشیا کلاس wp_term برگردانده می شود و در صورت عدم وجود واژه یا پست مقدار false برگشت داده می شود.

مثال: استخراج و نمایش لیستی از مجموعه های پست در حلقه وردپرس

<?php
$terms = get_the_terms( get_the_ID(), 'category' );
                         
if ( $terms &amp;&amp; ! is_wp_error( $terms ) ) : 
 
    $cats_links = array();
 
    foreach ( $terms as $term ) {
        $cats_links[] = $term->name;
    }
                         
    $on_draught = join( ", ", $cats_links );
    ?>
 
    <p class="beers draught">
        <?php printf( esc_html__( 'Categories: <span>%s</span>', 'textdomain' ), esc_html( $on_draught ) ); ?>
    </p>
<?php endif; ?>

استخراج اطلاعات واژگان طبقه بندی

برای استخراج اطلاعات واژگان یک یا چند طبقه بندی می توان از تابع get_terms استفاده نمود. این تابع آرایه ای از آرگومان های موثر در پرس و جوی واژگان از دیتابیس را به عنوان پارامتر ورودی می پذیرد. در صورت وجود واژگان آرایه ای از اشیا کلاس wp_terms برگردانده می شود و در صورت عدم وجود طبقه بندی شی از کلاس خطای wp_error برگشت داده می شود.

مثال: استخراج مجموعه ها و زیرمجموعه های موجود

<?php
$taxonomies = get_terms( array(
    'taxonomy' => 'category',
    'hide_empty' => false
) );
 
if ( !empty($taxonomies) ) :
    $output = '<select>';
    foreach( $taxonomies as $category ) {
        if( $category->parent == 0 ) {
            $output.= '<optgroup label="'. esc_attr( $category->name ) .'">';
            foreach( $taxonomies as $subcategory ) {
                if($subcategory->parent == $category->term_id) {
                $output.= '<option value="'. esc_attr( $subcategory->term_id ) .'">
                    '. esc_html( $subcategory->name ) .'</option>';
                }
            }
            $output.='</optgroup>';
        }
    }
    $output.='</select>';
    echo $output;
endif;
?>

توابع شرطی طبقه بندی

تابع taxonomy_exists

این تابع ثبت بودن یک طبقه بندی در وردپرس را مورد بررسی قرار می دهد و در صورت تایید ثبت مقدار true و در غیر این صورت مقدار false را برمی گرداند. پارامتر ورودی این تابع نام طبقه بندی است.

< ?php
             
/* If the album artist taxonomy exists. */
if ( taxonomy_exists( ‘album_artist’ ) ) {
             
    echo ‘The “artist” taxonomy is registered.’;
}
             
/* If the album artist taxonomy doesn’t exist. */
else {
             
    echo ‘The “artist” taxonomy is not registered.’;
}
             
? >

تابع is_taxonomy_hierarchical

این تابع سلسله مراتبی بودن یک طبقه بندی را بررسی می کند و در صورت تایید مقدار true و در غیر این صورت مقدار false را برمی گرداند.

< ?php
             
/* Create an array of custom taxonomies. */
$taxonomies = array(
    ‘album_artist’,
    ‘album_genre’
);
             
/* Open an unordered list. */
echo ‘ < ul > ’;
             
/* Loop through the array of taxonomies. */
foreach ( $taxonomies as $tax ) {
             
    /* If the taxonomy is hierarchical. */
    if ( is_taxonomy_hierarchical( $tax ) ) {
        echo ‘ < li > The ‘ . $tax . ‘ taxonomy is hierarchical. < /li > ’;
    }
             
    /* If the taxonomy is non-hierarchical. */
    else {
        echo ‘ < li > The ‘ . $tax . ‘ taxonomy is non-hierarchical. < /li > ’;
    }
}
             
/* Close the unordered list. */
echo ‘ < /ul > ’;
             
? > 

تابع is_tax

در صورتی که بازدیدکننده سایت در صفحه مربوط به واژگان یا طبقه بندی خاصی باشد مقدار true و در غیر این صورت false برگردانده می شود. این تابع دو پارامتر ورودی اختیاری می پذیرد: پارامتر اول نام طبقه بندی و پارامتر دوم نام واژه.

مثال:

< ?php
             
/* If on a taxonomy term archive page. */
if ( is_tax() ) {
    echo ‘You are viewing a term archive.’;
}
             
/* If viewing a term archive for the album genre taxonomy. */
if ( is_tax( ‘album_genre’ ) ) {
    echo ‘You are viewing a term archive for the genre taxonomy.’;
}
             
/* If viewing the blues archive for the album genre taxonomy. */
if ( is_tax( ‘album_genre’, ‘blues’ ) ) {
    echo ‘You are viewing the blues archive for the genre taxonomy.’;
}
             
? >

پست های مرتبط

Leave a Comment