تغییر شیوه انتخاب برچسب(Tag) مشابه دسته(Category) در وردپرس

تگ یا برچسب یکی از قابلیت های از پیش تعریف شده در وردپرس است که به شما کمک می کند تا محتویات وب سایت تان را بر اساس موضوعات مختلفی دسته بندی و مرتب سازی نمائید. هر پست(Post) یا نوشته می تواند شامل برچسب های متعددی باشد که بازدیدکنندگان یک وب سایت با کلیک بر روی آنها می توانند به سایر پست های مرتبط با همان برچسب دسترسی پیدا کنند.

در هنگام ایجاد یا ویرایش یک نوشته حالت پیش فرض انتخاب برچسب به صورت زیر می باشد.

انتخاب برچسب در وردپرس

ما قصد داریم با کمی کدنویسی وضعیت متاباکس بالا را به صورت زیر تغییر دهیم(مشابه انتخاب دسته یا Category) تا کلیه برچسب ها در یک نگاه قابل مشاهده و انتخاب باشند.

تغییر ظاهر انتخاب برچسب در وردپرس

برای انجام اینکار لازم است گام های زیر را به ترتیب در فایل functions.php قرار دهید.

گام اول: حذف متاباکس پیش فرض برچسب ها

برای افزودن متاباکس جدید ابتدا باید نسخه قدیمی آن را حذف کنید، به همین دلیل از تابع remove_meta_box به صورت زیر استفاده می کنیم.

function remove_old_tags_meta_box() {
    $id = 'tagsdiv-post_tag'; // inspect element (Ctrl+Shift+I)
    $post_type = 'post'; // remove only from post post_type
    $position = 'side';
    remove_meta_box( $id, $post_type, $position );
}
add_action( 'admin_menu', 'remove_old_tags_meta_box');

در قطعه کد بالا برای بدست آوردن مقدار id$ از ابزار Developer Tools مرورگر کروم به صورت زیر استفاده شده است.

dev tools مرورگر کروم

گام دوم: ایجاد متاباکس جدید شبیه انتخاب دسته

پس از حذف متاباکس قدیمی به کمک تابع add_meta_box متاباکس جدید را به وردپرس معرفی می کنیم.

function add_new_tags_meta_box(){
    $id = 'newtagsdiv-post_tag'; // it should be unique
    $heading = 'برچسب ها'; // meta box heading
    $callback = 'generate_tag_meta_box_content';
    $post_type = 'post';
    $position = 'side';
    $pri = 'default';
    add_meta_box( $id, $heading, $callback, $post_type, $position, $pri );
}
add_action( 'admin_menu', 'add_new_tags_meta_box');

 

در مرحله بعد تابع generate_meta_box_content که به عنوان مقدار متغیر callback$ تعیین شده است را به صورت زیر پیاده سازی کنید.

function generate_meta_box_content($post) {
    
    $all_tags = get_terms( array('taxonomy' => 'post_tag', 'hide_empty' => 0) );
    $all_tags_of_post = get_the_terms( $post->ID, 'post_tag' );

    $ids = array();
    if ( $all_tags_of_post ) {
        foreach ($all_tags_of_post as $tag ) {
            $ids[] = $tag->term_id;
        }
    }
    
    echo '<div id="taxonomy-post_tag" class="categorydiv">';
    echo '<div id="tag-all" class="tabs-panel" style="display:block">';
    echo '<input type="hidden" name="tax_input[post_tag][]" value="0" />';
    echo '<ul>';
    foreach( $all_tags as $tag ){
        $checked = "";
        if ( in_array( $tag->term_id, $ids ) ) {
            $checked = " checked='checked'";
        }
        $id = 'post_tag-' . $tag->term_id;
        echo "<li id='{$id}'>";
        echo "<label><input type='checkbox' name='tax_input[post_tag][]' id='in-$id'". $checked ." value='$tag->slug' /> $tag->name</label><br />";
        echo "</li>";
    }
    echo '</ul></div></div>';
}

 

در کدهای بالا ابتدا با تابع get_terms کلیه برچسب های تعریف شده وردپرس را در قالب آرایه ای از اشیا(Object) بدست می آوریم، سپس به کمک تابع get_the_terms برچسب های یک پست مشخص که ممکن است در حالت ویرایش باشد را استخراج می کنیم، در نهایت در یک حلقه foreach تمامی برچسب ها را با استفاده از کدهای HTML به عنوان خروجی کار نمایش می دهیم.

نظرات و سوالات کاربران

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *