it-swarm.asia

التصنيف المخصص المحدد لنوع المنشورات المخصصة

أريد إنشاء تصنيف مخصص يتصرف بشكل مشابه لنوع المنشور ، حيث تتصرف الفئة في المنشورات الافتراضية (على أساس /٪ category٪ /٪ postname٪/permalink) بحيث تكون المنشورات في أنواع المنشورات المخصصة معروض كـ www.example.com/custom-post-type/custom-taxonomy-name/post-name أريد أيضًا أن يظهر مربع meta للفئة فقط عندما نضيف الافتراضي الجديد نشر وليس عندما نضيف منشورًا جديدًا في نوع المنشور المخصص ومربع التصنيف المخصص للظهور فقط عند إضافة منشور جديد في نوع المنشور المخصص وليس عند إضافة منشور افتراضي جديد.

28
Saurabh Goel

بادئ ذي بدء ، إذا كنت تريد إظهار metabox للتصنيف فقط لنوع المنشور المخصص ، فقم بتسجيل التصنيف إلى ذلك النوع المنشور المخصص فقط عن طريق تمرير اسم نوع المنشور المخصص كوسيطة في register_taxonomy. من خلال القيام بذلك ، يظهر مربع تصنيف التصنيف فقط لنوع المنشور المخصص. إذا كنت لا ترغب في عرض الفئة metabox على نوع المنشور المخصص ، فقم بإزالة مصطلح الفئة كوسيطة أثناء تسجيل نوع المنشور المخصص ، وبدلاً من ذلك ، قم بتضمين اسم سبيكة التصنيف مثل "taxonomies" => array ("post_tag" ، "your_taxonomy_name") . هنا هو رمز كيف حققت ذلك. لقد سجلت تصنيفًا مخصّصًا باستخدام سمة من سمات slug أسفل تحت سمات نوع النشر المخصص


function themes_taxonomy() {  
    register_taxonomy(  
        'themes_categories',  //The name of the taxonomy. Name should be in slug form (must not contain capital letters or spaces). 
        'themes',        //post type name
        array(  
            'hierarchical' => true,  
            'label' => 'Themes store',  //Display name
            'query_var' => true,
            'rewrite' => array(
                'slug' => 'themes', // This controls the base slug that will display before each term
                'with_front' => false // Don't display the category base before 
            )
        )  
    );  
}  
add_action( 'init', 'themes_taxonomy');

ثم لتغيير الرابط الثابت لقد خلقت وظيفة التالية


function filter_post_type_link($link, $post)
{
    if ($post->post_type != 'themes')
        return $link;

    if ($cats = get_the_terms($post->ID, 'themes_categories'))
        $link = str_replace('%themes_categories%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

ثم سجلت نوعًا مخصصًا للنشر باستخدام السمات البارزة أدناه


//Registering Custom Post Type Themes
add_action( 'init', 'register_themepost', 20 );
function register_themepost() {
    $labels = array(
        'name' => _x( 'Themes', 'my_custom_post','custom' ),
        'singular_name' => _x( 'Theme', 'my_custom_post', 'custom' ),
        'add_new' => _x( 'Add New', 'my_custom_post', 'custom' ),
        'add_new_item' => _x( 'Add New ThemePost', 'my_custom_post', 'custom' ),
        'edit_item' => _x( 'Edit ThemePost', 'my_custom_post', 'custom' ),
        'new_item' => _x( 'New ThemePost', 'my_custom_post', 'custom' ),
        'view_item' => _x( 'View ThemePost', 'my_custom_post', 'custom' ),
        'search_items' => _x( 'Search ThemePosts', 'my_custom_post', 'custom' ),
        'not_found' => _x( 'No ThemePosts found', 'my_custom_post', 'custom' ),
        'not_found_in_trash' => _x( 'No ThemePosts found in Trash', 'my_custom_post', 'custom' ),
        'parent_item_colon' => _x( 'Parent ThemePost:', 'my_custom_post', 'custom' ),
        'menu_name' => _x( 'Themes Posts', 'my_custom_post', 'custom' ),
    );

    $args = array(
        'labels' => $labels,
        'hierarchical' => false,
        'description' => 'Custom Theme Posts',
        'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'post-formats', 'custom-fields' ),
        'taxonomies' => array( 'post_tag','themes_categories'),
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,
        'menu_icon' => get_stylesheet_directory_uri() . '/functions/panel/images/catchinternet-small.png',
        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => array('slug' => 'themes/%themes_categories%','with_front' => FALSE),
        'public' => true,
        'has_archive' => 'themes',
        'capability_type' => 'post'
    );  
    register_post_type( 'themes', $args );//max 20 charachter cannot contain capital letters and spaces
}  

هناك بعض الأشياء التي يجب عليك تذكرها أثناء تسجيل منشور مخصص. تغيير المعلمة has_archive إلى اسم slug لنوع المنشور المخصص وآخر هو تغيير اسم slug لإعادة الكتابة باسم 'slug' => 'custom_post_type_slug /٪ taxonomy_slug٪

الآن عند إضافة نوع منشور جديد في صفحة نوع منشور الكتابة ... سترى الرابط الثابت كـ http://www.example.com/wordpress/themes/٪themes_categories٪/post-name/ . إذا لم يتم تحديد التصنيف المخصص لهذا المنشور ، فسيظل الرابط الثابت http://www.example.com/wordpress/themes/٪themes_categories٪/post-name/ والذي سيُظهر عندئذٍ طلبًا سيئًا. لتصحيح هذا ، نقوم بإنشاء مصطلح افتراضي في التصنيف المخصص. (مثل غير مصنف في فئات) أضف هذا إلى jobs.php

function default_taxonomy_term( $post_id, $post ) {
    if ( 'publish' === $post->post_status ) {
        $defaults = array(
            'themes_categories' => array( 'other'),   //

            );
        $taxonomies = get_object_taxonomies( $post->post_type );
        foreach ( (array) $taxonomies as $taxonomy ) {
            $terms = wp_get_post_terms( $post_id, $taxonomy );
            if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
                wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
            }
        }
    }
}
add_action( 'save_post', 'default_taxonomy_term', 100, 2 );

الآن عندما يتم ترك التصنيف المخصص فارغًا ، يصبح الرابط الثابت http://www.example.com/wordpress/themes/other/post-name/ تلقائيًا.

أخيرًا ، لا تنسى أن تقوم بعملية إعادة الكتابة عن طريق النقر فوق "حفظ التغييرات" في إعداد الرابط الثابت في قسم المسؤول ، وإلا سيتم إعادة توجيهك إلى الخطأ 404. آمل أن يساعدك هذا.

46
Rabin shrestha

على سبيل المثال ، سجل تصنيفًا مخصصًا MY_NEW_CARSS لأنواع المنشورات المخصصة:

$my_taxon_name  = 'MY_NEW_CARSS';
$my_post_types  = array('SUB_CAT_1','SUB_CAT_2','SUB_CAT_3');


//REGISTER CUSTOM TAXONOMY ( http://codex.wordpress.org/Function_Reference/register_taxonomy )
//If you aim to register HIERARCHICAL(Parent-ed) post type, read this warning: https://codex.wordpress.org/Function_Reference/register_post_type#hierarchical
add_action( 'init', 'my_f32' ); function my_f32() { 
    register_taxonomy( $GLOBALS['my_taxon_name'], array(), 
        array( 
            'label'=>$GLOBALS['my_taxon_name'],     'public'=>true, 'show_ui'=>true,  'show_admin_column'=>true,   'query_var'=>true,
            'hierarchical'=>true,   'rewrite'=>array('with_front'=>true,'hierarchical'=>true),  
             ));
}

//REGISTER CUSTOM POST TYPE ( http://codex.wordpress.org/Function_Reference/register_post_type )
add_action( 'init', 'myf_63' );function myf_63() { 

    foreach ($GLOBALS['my_post_types'] as $each_Type)       {
            register_post_type( $each_Type, 
                array( 
                    'label'=>$each_Type,     'labels' => array('name'=>$each_Type.' pagess', 'singular_name'=>$each_Type.' page'),        'public' => true,   'publicly_queryable'=> true,      'show_ui'=>true,      'capability_type' => 'post',      'has_archive' => true,      'query_var'=> true,     'can_export' => true,                   //'exclude_from_search' => false,     'show_in_nav_menus' => true,  'show_in_menu' => 'edit.php?post_type=page',//true,     'menu_position' => 5,
                    'hierarchical' =>true,
                    'supports' =>array( 'page-attributes', 'title', 'editor', 'thumbnail' ), 
                    'rewrite' => array('with_front'=>true, ),     //    'rewrite' => array("ep_mask"=>EP_PERMALINK ...) OR    'permalink_epmask'=>EP_PERMALINK, 
                ));

            register_taxonomy_for_object_type('category',$each_Type);       //standard categories
            register_taxonomy_for_object_type($GLOBALS['my_taxon_name'] ,$each_Type);   //Custom categories
    }
}
1
T.Todua