انجمن


نمایش تمام Category ها و پستهایشان بصورت Hierarchical  (۲ نوشته)

  • somin

    آفلاین
    عضو
    تعداد نوشته‌ها: ۱۰
    تشکر شده: ۱ بار
    # نوشته شده: ۱۲ سال پیش
    ۴ شهریور ۱۳۹۱ - ۰۸:۵۴

    تعداد پستهای وبلاگم خیلی زیاد شده بود گفتم خوبه یه صفحه بذارم که توش تمام پستها رو لیست کنم که قابل بررسی و پیگیری کلی و منظم و راحت باشه.
    لیست هم بصورت سلسله مراتبی باشه که بر اساس Category ها شکل گرفته.

    دیشب این کد رو برای این کار نوشتم:

    PLAIN TEXT
    function list_cat_posts($cat_id) {
        $posts=get_posts(array('numberposts' = > -1, 'category'= >$cat_id));
        if(empty($posts)) return;
        echo '
    <ul>'
    ;
        foreach($posts as $post) {
            if(!in_category($cat_id, $post- >ID)) continue;
            echo '
    <li>'
    ;
            echo '<a>ID), '" >';
            echo $post- >post_title;
            echo '</a>';
        }
        echo '</li>
    </ul>
    ';
    }

    function traverse_cats($cat=null) {
        if(is_null($cat)) {
            $cats=get_categories(array('parent'= >0));
            echo '
    <ul>';
            foreach($cats as $cat) traverse_cats($cat);
            echo '</ul>
    ';
            return;
        }
        echo '
    <li>';
        echo $cat- >name;
        echo '< span style="
    visibility: hidden" >‌ه< /span >(', count(get_posts(array('numberposts' = > -1, 'category'= >$cat- >cat_ID))), ')';
        if(count($cats=get_categories(array('parent'= >$cat- >cat_ID)))) {
            $n=count($cats);
            echo '
    <ul>';
            foreach($cats as $tmp) traverse_cats($tmp);
            echo '</ul>
    ';
            list_cat_posts($cat- >cat_ID);
        }
        else list_cat_posts($cat- >cat_ID);
    }

    echo '< h1 class="
    entry-title" align="center" >فهرست تمام نوشته ها';
    echo '< span style="
    font-size: smaller" > (', count(get_posts(array('numberposts' = > -1))), ')< /span >';
    echo '< /h1 >';
    echo '< center >< table >< tr >< td >';

    traverse_cats();

    echo '< /td >< /tr >< /table >< /center >';

    traverse_cats یک تابع بازگشتی است.

    خواستم ببینم شاید کسی راه سرراست تری سراغ داشته باشه.
    لیست توابع وردپرس رو نگاه کردم اما تابع سرراستی برای این کار نداشت ظاهرا، بخاطر همین خودم دست به کار شدم.

  • somin

    آفلاین
    عضو
    تعداد نوشته‌ها: ۱۰
    تشکر شده: ۱ بار
    # نوشته شده: ۱۲ سال پیش
    ۷ شهریور ۱۳۹۱ - ۲۳:۰۳

    ببخشید یه اشکالی در کد وجود داشت که باعث میشد دسته هایی که مستقیما تحت خودشون پست ندارن اما در زیر دسته هاشون پست دارن نمایش داده نشن. الان که دسته بندی وبلاگ خودم رو تغییراتی دادم متوجه شدم.

    بخاطر اون خط بود که نوشته بودم if(empty($posts)) return
    حالا اون خط رو در کد حذف کردم این باگ برطرف شد (کد جدید در این پست).

    ضمنا خوشبختانه تابع get_categories خودش بصورت پیشفرض دسته هایی رو که بدون پست باشن برنمیگردونه. هدف منم همین بود که دسته های خالی نمایش داده نشن.

    function list_cat_posts($cat_id) {
        $posts=get_posts(array('numberposts' => -1, 'category'=>$cat_id));
        echo '<ul>';
        foreach($posts as $post) {
            if(!in_category($cat_id, $post->ID)) continue;
            echo '<li>';
            echo '<a target="_blank" href="', get_permalink($post->ID), '">';
            echo $post->post_title;
            echo '</a>';
        }
        echo '</ul>';
    }
    
    function traverse_cats($cat=null) {
        if(is_null($cat)) {
            $cats=get_categories(array('parent'=>0));
            echo '<ul>';
            foreach($cats as $cat) traverse_cats($cat);
            echo '</ul>';
            return;
        }
        echo '<li>';
        echo $cat->name;
        echo '<span style="visibility: hidden">‌ه</span>(', count(get_posts(array('numberposts' => -1, 'category'=>$cat->cat_ID))), ')';
        if(count($cats=get_categories(array('parent'=>$cat->cat_ID)))) {
            $n=count($cats);
            echo '<ul>';
            foreach($cats as $tmp) traverse_cats($tmp);
            echo '</ul>';
            list_cat_posts($cat->cat_ID);
        }
        else list_cat_posts($cat->cat_ID);
    }
    
    echo '<h1 class="entry-title" align="center">فهرست تمام نوشته ها';
    echo '<span style="font-size: smaller"> (', count(get_posts(array('numberposts' => -1))), ')</span>';
    echo '</h1>';
    echo '<center><table><tr><td>';
    
    traverse_cats();
    
    echo '</td></tr></table></center>';
  • درباره‌ی این موضوع



    برچسب‌ها

    هیچ برچسبی نیست.