it-swarm.asia

مخصص نوع بوست المحفوظات حسب التاريخ والتصنيف

لنستخدم المثال الكلاسيكي لنوع منشور مخصص يسمى "أفلام" ، مع تصنيفها الخاص الذي يسمى "النوع".

من خلال تسجيل نوع المنشور المخصص (باستخدام سبيكة "أفلام") ، تم إعداد الروابط الدائمة بالفعل

<domain>/movie/action/ 

... لمشاهدة جميع الأفلام في هذا النوع من الحركة.

ولكن ، المحفوظات حسب التاريخ ، مثل

<domain>/2010/09/

... لا أعرف عن نوع المنشور المخصص.

أقرب أرشيف يستند إلى التاريخ وأستطيع أن أعمل فيه هو:

<domain>/2010/?post_type=movies

... الذي يسرد جميع أنواع المنشورات المخصصة المنشورة خلال العام الحالي (2010). لسبب ما ، لا يمكن إضافة الشهر والتصنيف والمدة إلى عنوان URL للحصول على النتيجة المتوقعة.

ما يجب القيام به لتمكين عنوان url مثل هذه ...

<domain>/2010/09/movie/action/

... للعمل كما هو متوقع ، وبالتالي لسرد جميع أفلام الحركة المنشورة خلال سبتمبر 2010؟

6
Werner

نعم ، لا يوجد دعم مضمّن حاليًا لأرشيفات CPT ، لكن هذا لا يعني أنه لا يمكنك تمديد WP لتوفيره. أنا فعلت هذا بنفسي في اليوم الآخر ...

لن يؤدي ذلك إلى إنشاء الأرشيفات القائمة على التاريخ التي تبحث عنها ، ولكنها ستمنحك سلوك الأرشيف الظاهري لأنواع المنشورات المخصصة. يجب أن تكون إضافة التاريخ مجرد تغيير في قواعد إعادة الكتابة (في الواقع ، قد تعمل الروابط الدائمة القائمة على التاريخ كما هي) ...

مثال: لديك نوع مخصص من "الأفلام" وآخر لفيلم واحد يسمى "ذهب مع الريح". سيمنحك هذا الرمز بنية عنوان URL لموقع website.com/movies/gone-with-the-wind. وأيضًا ، سيؤدي الانتقال إلى website.com/movies إلى سرد الأفلام فقط (تمامًا مثل أرشيف الفئات ، على الرغم من أنه لن يستدعي قالب archive.php للإخراج ، ولكنه سينسيق الإخراج تمامًا مثل قالب حلقة index.php القياسية).

function register_post_type_archives( $post_type, $base_path = '' ) {
    global $wp_rewrite;
    if ( !$base_path ) {
        $base_path = $post_type;
    }
    $rules = $wp_rewrite->generate_rewrite_rules($base_path);
    $rules[$base_path.'/?$'] = 'index.php?paged=1';
    foreach ( $rules as $regex=>$redirect ) {
        if ( strpos($redirect, 'attachment=') == FALSE ) {
            $redirect .= '&post_type='.$post_type;
            if (  0 < preg_match_all('@\$([0-9])@', $redirect, $matches) ) {
                for ( $i=0 ; $i < count($matches[0]) ; $i++ ) {
                    $redirect = str_replace($matches[0][$i], '$matches['.$matches[1][$i].']', $redirect);
                }
            }
        }
        add_rewrite_rule($regex, $redirect, 'top');
    }
}

استدعاء هذه الوظيفة مباشرة بعد إنشاء نوع المنشور المخصص:

register_post_type('movies', $args);
register_post_type_archives('movies');

بعد ذلك ، إذا كنت تريد أن تكون قادرًا على استخدام قوالب مخصصة للتحكم في إخراج قوائم الأرشيف شبه ، يمكنك استخدام هذا:

add_action('template_redirect', 'post_type_templates');
function post_type_templates() {
    $post_type = get_query_var('post_type');
    if (!empty($post_type)) {
        locate_template(array("{$post_type}.php","index.php"), true);
        die;
    }
}

يمكنك الآن إنشاء قالب "movies.php" في نسختك وتخصيص إخراج الحلقة حسب رغبتك ..

UPDATE: وجود وظيفة الأرشيف لأنواع مخصصة أمر رائع ، لكنني أدركت أنني بحاجة إلى وسيلة للوصول إليها. من الواضح أنه يمكنك استخدام أزرار التعليمات البرمجية الثابتة في مكان ما يشير إلى الرخويات ، لكنني قمت بعمل لإنشاء شريط تنقل wp3.0 مع جميع أنواعي المخصصة فيه. في الوقت الحالي ، يولد شريط التنقل الجديد ويجعله الأساسي ، لكن يمكنك تغييره ليكون ثانويًا ، أو لإضافة العناصر إلى شريط التنقل الحالي. ملاحظة: لن تعمل روابط التنقل إلا إذا كنت تستخدم قواعد إعادة الكتابة من الأعلى.

function register_typenav() {
    $mainnav = wp_get_nav_menu_object('Types Nav');
    if (!$mainnav) {
        $menu_id = wp_create_nav_menu( 'Types Nav' );
        // vav item for each post type
        $types = get_post_types( array( 'exclude_from_search' => false ), 'objects' );
        foreach ($types as $type) {
            if (!$type->_builtin) {
                wp_update_nav_menu_item( $menu_id, 0, array(
                    'menu-item-type' => 'custom',
                    'menu-item-title' => $type->labels->name,
                    'menu-item-url' => get_bloginfo('url') . '/' . $type->rewrite['slug'] . '/',
                    'menu-item-status' => 'publish'
                    )
                );
            }
        }
    if ($mainnav && !has_nav_menu( 'primary-menu' ) ) {
        $theme = get_current_theme();
        $mods = get_option("mods_$theme");
        $key = key($mods['nav_menu_locations']);
        $mods['nav_menu_locations'][$key] = $mainnav->term_id;
        update_option("mods_$theme", $mods);
    }
}
add_action('init', 'register_typenav');
6
somatic

أنواع المنشورات المخصصة ليست مصممة لتوفير الأرشيف كما يفعل نوع منشورات المدونة الشائعة. قد يكون هذا شيء سوف يتغير في المستقبل.

هذا هو الرابط المفقود: تحسينات أنواع النشر المخصصة (CPT) التي تستحق النظر في 3.1 .

2
hakre

يوفر هذا البرنامج المساعد بالضبط ما تريد. كان يعمل بشكل جيد مع وورد 3.3.1.

1
baxang