কাস্টম পোস্ট টাইপ / বিভাগে ইউআরএল বিভাগের বিভাগ যুক্ত করুন


23

আমি ওয়ার্ডপ্রেসে একটি এলএমএস টাইপ সিস্টেম তৈরি করছি, যার দ্বারা নিয়ন্ত্রিত Custom Post types
পোস্টের Lessonsধরণটিকে বলা হয় (একটি স্লাগ সহ courses) এবং এটিতে একটি custom taxonomy(বিভাগ) বলা হয় courses

ডোমেন ইউআরএল কাঠামো এই মুহূর্তে দেখায়:

domain.com/courses/lesson-name

আমি এটি হয়ে উঠতে চাই:

domain.com/courses/[course-name{category}]/lesson-name

বা মূলত:

/[cpt]/%category%/%postname%/

এখানে আমি যে প্লাগইনটি লিখেছি তা এখন নিয়ন্ত্রণ CPTsকরছে।

function rflms_post_type() {
    $labels = array(
        'name'                => _x( 'Lessons', 'Post Type General Name', 'text_domain' ),
        'singular_name'       => _x( 'Lesson', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'           => __( 'Lessons', 'text_domain' ),
        'parent_item_colon'   => __( 'Parent Product:', 'text_domain' ),
        'all_items'           => __( 'All Lessons', 'text_domain' ),
        'view_item'           => __( 'View Lesson', 'text_domain' ),
        'add_new_item'        => __( 'Add New Lesson', 'text_domain' ),
        'add_new'             => __( 'New Lesson', 'text_domain' ),
        'edit_item'           => __( 'Edit Lesson', 'text_domain' ),
        'update_item'         => __( 'Update Lesson', 'text_domain' ),
        'search_items'        => __( 'Search Lessions', 'text_domain' ),
        'not_found'           => __( 'No Lessons Found', 'text_domain' ),
        'not_found_in_trash'  => __( 'No Lessons Found in Trash', 'text_domain' ),
    );

    $args = array(
        'label'               => __( 'Lessons', 'text_domain' ),
        'description'         => __( 'Referable Lessons', 'text_domain' ),
        'labels'              => $labels,
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'supports'        => array('premise-member-access', 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
        'menu_position'       => 5,
        'menu_icon'           => null,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
        'rewrite'                    => array('slug' => 'courses'),
    );

    register_post_type( 'lessons', $args );


// Hook into the 'init' action

}
add_action( 'init', 'rflms_post_type', 0 );

// Register Custom Taxonomy
function custom_taxonomy()  {
    $labels = array(
        'name'                       => _x( 'Courses', 'Taxonomy General Name', 'text_domain' ),
        'singular_name'              => _x( 'Course', 'Taxonomy Singular Name', 'text_domain' ),
        'menu_name'                  => __( 'Courses', 'text_domain' ),
        'all_items'                  => __( 'All Courses', 'text_domain' ),
        'parent_item'                => __( 'Parent Course', 'text_domain' ),
        'parent_item_colon'          => __( 'Parent Course:', 'text_domain' ),
        'new_item_name'              => __( 'New Course Name', 'text_domain' ),
        'add_new_item'               => __( 'Add New Course', 'text_domain' ),
        'edit_item'                  => __( 'Edit Course', 'text_domain' ),
        'update_item'                => __( 'Update Course', 'text_domain' ),
        'separate_items_with_commas' => __( 'Separate Courses with commas', 'text_domain' ),
        'search_items'               => __( 'Search Courses', 'text_domain' ),
        'add_or_remove_items'        => __( 'Add or Remove Courses', 'text_domain' ),
        'choose_from_most_used'      => __( 'Choose from Most Used courses', 'text_domain' ),
    );

    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => false,
        'rewrite'                    => array('slug' => 'courses'),
    );

    register_taxonomy( 'course', 'lessons', $args );
}

// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );

সম্প্রতি, আমি এই সমস্যার মুখোমুখি হই। মীমাংসিত! [# 188834] [1] [1]: wordpress.stackexchange.com/questions/94817/...
maheshwaghmare

সমাধান! (অন্তহীন গবেষণার পরে) <br/> <br/> আপনার post_type_linkফিল্টারটি পরিবর্তন করা উচিত । আরও at: wordpress.stackexchange.com/a/167992/33667 )
টুডো

উত্তর:


36

কোর্সের ক্যোয়ারী বর্ণটি যুক্ত করতে আপনার পুনর্লিখনটি পরিবর্তন করুন:

'rewrite' => array('slug' => 'courses/%course%')

তারপরে post_type_linkনির্বাচিত পাঠ্যক্রমটি permalink এ প্রবেশ করানোর জন্য ফিল্টার করুন :

function wpa_course_post_link( $post_link, $id = 0 ){
    $post = get_post($id);  
    if ( is_object( $post ) ){
        $terms = wp_get_object_terms( $post->ID, 'course' );
        if( $terms ){
            return str_replace( '%course%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;  
}
add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );

কাস্টম পোস্ট টাইপ পারমালিনিক্সের মতো প্লাগইন রয়েছে যা আপনার জন্য এটি করতে পারে।


আপনাকে ধন্যবাদ, আমি আপনার দ্রুত উত্তরটি প্রশংসা করি। এটি সম্পূর্ণ জ্ঞান করে। যদিও আমি কৌতূহলী, আমি পোস্ট_ টাইপ_লিংক ফিল্টারটি কোথায় ?োকাব? আমি কি পুরো ডকুমেন্টের নীচে যেতে পারি?
জাচ রাসেল

আমি এটিকে নীচে যুক্ত করেছি এবং এটি পৃষ্ঠা 404 এর।
জাচ রাসেল

1
আপনাকে পুনর্লিখনগুলি ফ্লাশ করতে হবে, পারমালিক্স সেটিংস পৃষ্ঠাতে যান।
মিলো

এছাড়াও খেয়াল করুন যে আপনার সম্ভবত একটি সংজ্ঞা এবং একটি পোস্ট টাইপ উভয় একই স্লাগ ভাগ করে নেওয়ার সাথে সংঘর্ষ হবে।
মিলো

যেখানে এখন আমি এটি পারমালিঙ্কগুলি ঠিকঠাক করছি, কিন্তু এটি সঠিকভাবে সম্পাদন করছে না (এটি নরম 404ing)। এই কাজটি সঠিকভাবে পেতে আমি কী করতে পারি তার কোনও সুপারিশ? আমি পারমালিঙ্ক ফ্লাশ পুনরায় লেখাগুলি থেকে দূরে আছি। কেবল 'সংরক্ষণ করুন' এ ক্লিক করুন এবং এটি ফাইল আপডেট করে (এটি এনজিনেক্স তাই এটি এনজিনএক্স.কনফ ফাইলের মধ্যে নিয়ন্ত্রিত)
জাচ রাসেল

1

হাঁ! অনেক গবেষণার পরে আমি ' কাস্টম পারমালিঙ্কস ' প্লাগইন পেয়েছি । যা আমার প্রয়োজনীয়তা পূরণ করে - কাস্টম ইউআরএল উদা

  • বিভাগের জন্য
  • পোস্টের জন্য
  • কাস্টম পোস্টের জন্য
  • কাস্টম ট্যাক্সনমি ইত্যাদির জন্য

এই কাস্টম পোস্ট ধরণের পছন্দ - পোস্ট :

এখানে চিত্র বর্ণনা লিখুন


1

সমাধান পেয়েছি!

কাস্টম পোস্ট প্রকারের জন্য হায়ারারিকিকাল পারমালিক্স থাকতে কাস্টম পোস্ট টাইপ পারমলিংক ( https://wordpress.org/plugins/custom-post-type-permalinks/ ) প্লাগইন ইনস্টল করুন ।

নিবন্ধিত পোস্ট টাইপ আপডেট করুন। সহায়তা কেন্দ্র হিসাবে আমার পোস্টের নাম রয়েছে

function help_centre_post_type(){
    register_post_type('helpcentre', array( 
        'labels'            =>  array(
            'name'          =>      __('Help Center'),
            'singular_name' =>      __('Help Center'),
            'all_items'     =>      __('View Posts'),
            'add_new'       =>      __('New Post'),
            'add_new_item'  =>      __('New Help Center'),
            'edit_item'     =>      __('Edit Help Center'),
            'view_item'     =>      __('View Help Center'),
            'search_items'  =>      __('Search Help Center'),
            'no_found'      =>      __('No Help Center Post Found'),
            'not_found_in_trash' => __('No Help Center Post in Trash')
                                ),
        'public'            =>  true,
        'publicly_queryable'=>  true,
        'show_ui'           =>  true, 
        'query_var'         =>  true,
        'show_in_nav_menus' =>  false,
        'capability_type'   =>  'page',
        'hierarchical'      =>  true,
        'rewrite'=> [
            'slug' => 'help-center',
            "with_front" => false
        ],
        "cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",
        'menu_position'     =>  21,
        'supports'          =>  array('title','editor', 'thumbnail'),
        'has_archive'       =>  true
    ));
    flush_rewrite_rules();
}
add_action('init', 'help_centre_post_type');

এবং এখানে রেজিস্ট্রেশন করা হয় শ্রবণ

function themes_taxonomy() {  
    register_taxonomy(  
        'help_centre_category',  
        'helpcentre',        
        array(
            'label' => __( 'Categories' ),
            'rewrite'=> [
                'slug' => 'help-center',
                "with_front" => false
            ],
            "cptp_permalink_structure" => "/%help_centre_category%/",
            'hierarchical'               => true,
            'public'                     => true,
            'show_ui'                    => true,
            'show_admin_column'          => true,
            'show_in_nav_menus'          => true,
            'query_var' => true
        ) 
    );  
}  
add_action( 'init', 'themes_taxonomy');

এই লাইনটি আপনার পারমিলিংকে কাজ করে

"cptp_permalink_structure" => "/%help_centre_category%/%post_id%-%postname%/",

আপনি অপসারণ করতে পারেন %post_id%এবং রাখতে পারেন/%help_centre_category%/%postname%/"

ড্যাশবোর্ড থেকে permalink ফ্লাশ করতে ভুলবেন না।


1

আমার জন্য সমাধানটির তিনটি অংশ ছিল। আমার ক্ষেত্রে পোস্ট টাইপ কল করা হয় trainings

  1. যোগ 'rewrite' => array('slug' => 'trainings/%cat%')করার জন্য register_post_typeফাংশন।
  2. গতিশীল বিভাগে স্লাগ পরিবর্তন করুন।
  3. নতুন গতিশীল URL- এ "শুনুন" এবং উপযুক্ত টেম্পলেটটি লোড করুন।

সুতরাং এখানে প্রদত্ত পোস্টের ধরণের জন্য কীভাবে পরিবর্তনশীল পরিবর্তন করতে হয় তা এখানে। এতে যুক্ত করুন functions.php:

function vx_soon_training_post_link( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if ( is_object( $post ) ) {
        $terms = wp_get_object_terms( $post->ID, 'training_cat' );
        if ( $terms ) {
            return str_replace( '%cat%', $terms[0]->slug, $post_link );
        }
    }

    return $post_link;
}

add_filter( 'post_type_link', 'vx_soon_training_post_link', 1, 3 );

... এবং এইভাবে নতুন গতিশীল URL এ উপযুক্ত টেম্পলেট লোড করা যায়। এতে যুক্ত করুন functions.php:

function archive_rewrite_rules() {
    add_rewrite_rule(
        '^training/(.*)/(.*)/?$',
        'index.php?post_type=trainings&name=$matches[2]',
        'top'
    );
    //flush_rewrite_rules(); // use only once
}

add_action( 'init', 'archive_rewrite_rules' );

এটাই! ডার্ম ব্যাকএন্ডে পারমালিঙ্কগুলি আবার সংরক্ষণ করে পারমলিকগুলি রিফ্রেশ করতে ভুলবেন না। অথবা flush_rewrite_rules()ফাংশনটি ব্যবহার করুন ।


1

আপনি রেজিস্ট্রেশন_পোস্ট_প্রকার ফাংশনটি ব্যবহার করে একটি কাস্টম পোস্ট প্রকার রেজিস্ট্রেশন করেছেন সেখানে লাইনের নীচে আপডেট করতে হবে।

'পুনর্লিখন' => অ্যারে ('স্লাগ' => 'কোর্স /% বিড়াল%')

পোস্টের ধরণের গতিশীল পরিবর্তন করতে আপনাকে ফাংশন.এফপি ফাইলে কোডের নীচে যুক্ত করতে হবে:

function change_link( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if( $post->post_type == 'courses' ) 
    {
       if ( is_object( $post ) ) {
          $terms = wp_get_object_terms( $post->ID, array('course') );
          if ( $terms ) {
             return str_replace( '%cat%', $terms[0]->slug, $post_link );
         }
      }
    }
    return   $post_link ;
}
add_filter( 'post_type_link', 'change_link', 1, 3 );

//load the template on the new generated URL otherwise you will get 404's the page

function generated_rewrite_rules() {
   add_rewrite_rule(
       '^courses/(.*)/(.*)/?$',
       'index.php?post_type=courses&name=$matches[2]',
       'top'
   );
}
add_action( 'init', 'generated_rewrite_rules' );

এরপরে, আপনাকে পুনর্লিখনের পারমলিক্সগুলি ফ্লুশ করতে হবে, ডব্লিউপি -অ্যাডমিন> সেটিংস> পারমলিংকগুলি যেতে হবে । "পরিবর্তনগুলি সংরক্ষণ করুন" বোতামটি ব্যবহার করে কেবল পার্মালিঙ্ক সেটিং আপডেট করুন।

এটি নীচের মতো ইউআরএলগুলি ফিরে আসবে:

  • domain.com/courses/[course-name{category}]/lesson-name

ধন্যবাদ!


0

এটি আমার জন্য কাজ করা হয়েছে:

'rewrite' => array(
        'slug' => 'portfolio',
        'with_front' => false,
        'hierarchical' => true // to display category/subcategroy
    ),

5
এটি বিভাগগুলি বা তাদের পথ ব্যবহার করে না এটি কেবলমাত্র কাস্টম পোস্টের ধরণেরকে শ্রেণিবিন্যাস করে তোলে।
জোরিস ক্রোস

0

সমাধানটিতে আগ্রহী যে কোনও ব্যক্তিকে, কাঁচা পিএইচপি কোডের সাথে টিঙ্কার না করে, আমি ম্যাকিয়েজ বিস-এর প্লাগইন পারমালিঙ্ক ম্যানেজার লাইটকে অত্যন্ত প্রস্তাব দিই । এটি একটি জীবন রক্ষাকারী

এটি 'পারমাস্ট্রাক্টস' এর উপর ভিত্তি করে কাস্টম পোস্ট টাইপের ইউআরএলে আপনার যে অংশটি চান তা সরাতে বা যুক্ত করতে একটি ভিজ্যুয়াল মেকানিজম রয়েছে:

পারমালিঙ্ক ম্যানেজার লাইটের স্ক্রিনশট

(কাস্টম পোস্ট ধরণের সাথে সাধারণ ইউআরএল স্ট্রাকচারের সাথে জড়িত সমস্ত ব্যথার সাথে আমরা ডাব্লুপি ছেড়ে চলে যাচ্ছিলাম এবং অন্য একটি সিএমএসে চলে যাচ্ছিলাম But তবে এসিএফ এবং সিপিটিইউআই বা পডের সাথে এই প্লাগইনটি ওয়ার্ডপ্রেসকে মোটামুটি পেশাদার করে তুলেছে))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.