it-swarm.asia

الروابط الدائمة: مخصص نوع الوظيفة -> تصنيف مخصص -> آخر

أواجه مشكلة في العمل مع قواعد إعادة كتابة WordPress ، ويمكنني استخدام بعض المساعدة.

لديّ نوع منشور مخصص يسمى _shows_.

جميع العروض لديها فئة تصنيف مخصص واحدة _show-category_. A _show_ لن تحتوي أبدًا على أكثر من _show-category_.

أرغب في توجيه عناوين url الخاصة بي بهذه الطريقة:

www.mysite.com/shows/  =>  archive-shows.php

www.mysite.com/shows/%category%/ => taxonomy-show-category.php

www.mysite.com/shows/%category%/%postname%/ => single-shows.php

لذلك كمثال على العالم الحقيقي ، دعنا نقول أن لدينا _show-category_ "Foo" ونشرة _show_ بعنوان "Bar" تحتوي على "Foo" لأنها _show-category_. أتوقع أن يبدو تطبيق WordPress الخاص بي كما يلي:

www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post

أحاول تجنب المكونات الإضافية عندما يكون ذلك ممكنًا ، لكنني منفتح على أي حل.

38
Paul T

أولاً ، سجل التصنيف الخاص بك وقم بتعيين وسيطة slugrewrite إلى shows:

register_taxonomy(
    'show_category',
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        // your other args...
    )
);

بعد ذلك ، سجل نوع المنشور الخاص بك وقم بتعيين سبيكة إلى shows/%show_category% ، واضبط وسيطة has_archive على shows:

register_post_type(
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows/%show_category%', 'with_front' => false ),
        'has_archive' => 'shows',
        // your other args...
    )
);

أخيرًا ، أضف عامل تصفية إلى post_type_link لاستبدال فئة العرض في الروابط الدائمة للعرض الفردي:

function wpa_show_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'show' ){
        $terms = wp_get_object_terms( $post->ID, 'show_category' );
        if( $terms ){
            return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );

EDIT

نسيت وسيطة has_archive في register_post_type أعلاه ، والتي يجب تعيينها على shows.

65
Milo