পারমিলিংয়ে কাস্টম পোস্ট প্রকারে বিভাগ যুক্ত করা হচ্ছে


22

আমি জানি যে লোকেরা এটি আগে জিজ্ঞাসা করেছিল এবং কাস্টম পোস্টের ধরণ যুক্ত করে চলে গেছে এবং পারমালিঙ্কের জন্য পুনরায় লিখবে।

সমস্যাটি হ'ল আমার কাছে 340 টি বিদ্যমান বিভাগ রয়েছে যা আমি ব্যবহার চালিয়ে যেতে চাই। আমি / বিভাগ / উপশ্রেণী / পোস্ট নাম দেখতে সক্ষম হয়েছি

এখন আমার কাছে কাস্টমপোস্টটাইপ / পোস্টের নাম রয়েছে। বিভাগটি নির্বাচন করা আর পারমালিঙ্কে প্রদর্শিত হবে না ... আমি অ্যাডমিনের পার্মালিঙ্ক সেটিংটি আলাদা কিছুতে পরিবর্তন করি নি।

আমি এখানে কিছু মিস করছি বা এই কোডটিতে যুক্ত করার দরকার আছে কি?

function jcj_club_post_types() {
    register_post_type( 'jcj_club', array(
        'labels' => array(
            'name' => __( 'Jazz Clubs' ),
            'singular_name' => __( 'Jazz Club' ),
            'add_new' => __( 'Add New' ),
            'add_new_item' => __( 'Add New Jazz Club' ),
            'edit' => __( 'Edit' ),
            'edit_item' => __( 'Edit Jazz Clubs' ),
            'new_item' => __( 'New Jazz Club' ),
            'view' => __( 'View Jazz Club' ),
            'view_item' => __( 'View Jazz Club' ),
            'search_items' => __( 'Search Jazz Clubs' ),
            'not_found' => __( 'No jazz clubs found' ),
            'not_found_in_trash' => __( 'No jazz clubs found in Trash' ),
            'parent' => __( 'Parent Jazz Club' ),
        ),
        'public' => true,
        'show_ui' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'menu_position' => 5,
        'query_var' => true,
        'supports' => array( 
            'title',
            'editor',
            'comments',
            'revisions',
            'trackbacks',
            'author',
            'excerpt',
            'thumbnail',
            'custom-fields',
        ),
        'rewrite' => array( 'slug' => 'jazz-clubs-in', 'with_front' => true ),
        'taxonomies' => array( 'category','post_tag'),
        'can_export' => true,
    )
);

2
এটি একটি নির্বোধ প্রশ্ন হতে পারে, তবে আপনি কি আপনার পুনর্লিখনগুলি সরিয়ে দিয়েছেন?
ক্রিস্টিনা

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

উত্তর:


16

কাস্টম পোস্ট ধরণের পুনর্লিখনের নিয়মগুলি যুক্ত করার সময় আক্রমণের জন্য 2 টি পয়েন্ট রয়েছে:

বিধি পুনর্লিখন

এই ঘটনা যখন লেখা নিয়ম উত্পন্ন হচ্ছে wp-includes/rewrite.phpমধ্যে WP_Rewrite::rewrite_rules()। ওয়ার্ডপ্রেস আপনাকে পোস্ট, পৃষ্ঠাগুলি এবং বিভিন্ন ধরণের সংরক্ষণাগার যেমন নির্দিষ্ট উপাদানগুলির জন্য পুনর্লিখনের নিয়মগুলি ফিল্টার করতে দেয়। আপনি posttype_rewrite_rulesযে posttypeঅংশটি দেখছেন তা আপনার কাস্টম পোস্টের নাম হওয়া উচিত। বিকল্প post_rewrite_rulesহিসাবে আপনি ফিল্টারটি ততক্ষণ ব্যবহার করতে পারবেন যতক্ষণ না আপনি স্ট্যান্ডার্ড পোস্ট বিধিগুলিও মুছে ফেলেন না।

এরপরে পুনরায় লেখার নিয়মগুলি তৈরি করার জন্য আমাদের ফাংশনটি দরকার:

// add our new permastruct to the rewrite rules
add_filter( 'posttype_rewrite_rules', 'add_permastruct' );

function add_permastruct( $rules ) {
    global $wp_rewrite;

    // set your desired permalink structure here
    $struct = '/%category%/%year%/%monthnum%/%postname%/';

    // use the WP rewrite rule generating function
    $rules = $wp_rewrite->generate_rewrite_rules(
        $struct,       // the permalink structure
        EP_PERMALINK,  // Endpoint mask: adds rewrite rules for single post endpoints like comments pages etc...
        false,         // Paged: add rewrite rules for paging eg. for archives (not needed here)
        true,          // Feed: add rewrite rules for feed endpoints
        true,          // For comments: whether the feed rules should be for post comments - on a singular page adds endpoints for comments feed
        false,         // Walk directories: whether to generate rules for each segment of the permastruct delimited by '/'. Always set to false otherwise custom rewrite rules will be too greedy, they appear at the top of the rules
        true           // Add custom endpoints
    );

    return $rules;
}

আপনি যদি চারপাশে খেলার সিদ্ধান্ত নেন তবে এখানে নজর রাখার মূল বিষয় হ'ল 'ওয়াক ডিরেক্টরি' বুলেটিয়ান। এটি একটি পারমাস্ট্রাক্টের প্রতিটি বিভাগের জন্য পুনর্লিখনের নিয়ম উত্পন্ন করে এবং পুনর্লিখনের নিয়ম মেলেনি cause যখন কোনও ওয়ার্ডপ্রেস ইউআরএল অনুরোধ করা হয় পুনরায় লেখার নিয়মের অ্যারেটি উপরে থেকে নীচে চেক করা হয়। যত তাড়াতাড়ি কোনও ম্যাচটি পাওয়া যায় এটি যা যা এসেছিল তা লোড করবে উদাহরণস্বরূপ যদি আপনার পারমাস্ট্রাক্টে লোভী মিল রয়েছে যেমন eg কারণ /%category%/%postname%/এবং ওয়াক ডিরেক্টরিগুলি এতে রয়েছে যা উভয়ের জন্যই পুনর্লিখনের নিয়ম /%category%/%postname%/এবং /%category%/যে কোনও কিছুর সাথে মিলবে। যদি খুব তাড়াতাড়ি এটি ঘটে তবে আপনি ক্ষতিগ্রস্থ হন।

পার্মালিনক্স

এটি এমন ফাংশন যা পোস্ট ধরণের পার্মলিংকগুলি পার্স করে এবং একটি পারমাস্ট্রাক্টকে (যেমন '/% বছর% /% মাসনাম% /% পোস্টনাম% /') কে সত্যিকারের URL এ রূপান্তর করে।

পরের অংশটি আদর্শভাবে get_permalink()পাওয়া ফাংশনের একটি সংস্করণ কী হবে তার একটি সাধারণ উদাহরণ wp-includes/link-template.php। কাস্টম পোস্ট পারমিলিংকগুলি উত্পন্ন হয় get_post_permalink()যার দ্বারা অনেকটা ওয়াটারড ডাউন সংস্করণ get_permalink()get_post_permalink()ফিল্টার করা হয় post_type_linkতাই আমরা এটি একটি কাস্টম পারমাস্ট্রাকচার করতে ব্যবহার করি।

// parse the generated links
add_filter( 'post_type_link', 'custom_post_permalink', 10, 4 );

function custom_post_permalink( $permalink, $post, $leavename, $sample ) {

    // only do our stuff if we're using pretty permalinks
    // and if it's our target post type
    if ( $post->post_type == 'posttype' && get_option( 'permalink_structure' ) ) {

        // remember our desired permalink structure here
        // we need to generate the equivalent with real data
        // to match the rewrite rules set up from before

        $struct = '/%category%/%year%/%monthnum%/%postname%/';

        $rewritecodes = array(
            '%category%',
            '%year%',
            '%monthnum%',
            '%postname%'
        );

        // setup data
        $terms = get_the_terms($post->ID, 'category');
        $unixtime = strtotime( $post->post_date );

        // this code is from get_permalink()
        $category = '';
        if ( strpos($permalink, '%category%') !== false ) {
            $cats = get_the_category($post->ID);
            if ( $cats ) {
                usort($cats, '_usort_terms_by_ID'); // order by ID
                $category = $cats[0]->slug;
                if ( $parent = $cats[0]->parent )
                    $category = get_category_parents($parent, false, '/', true) . $category;
            }
            // show default category in permalinks, without
            // having to assign it explicitly
            if ( empty($category) ) {
                $default_category = get_category( get_option( 'default_category' ) );
                $category = is_wp_error( $default_category ) ? '' : $default_category->slug;
            }
        }

        $replacements = array(
            $category,
            date( 'Y', $unixtime ),
            date( 'm', $unixtime ),
            $post->post_name
        );

        // finish off the permalink
        $permalink = home_url( str_replace( $rewritecodes, $replacements, $struct ) );
        $permalink = user_trailingslashit($permalink, 'single');
    }

    return $permalink;
}

যেমনটি কাস্টম পুনর্লিখনের নিয়ম ও পারমালিক্স তৈরির জন্য খুব সরল একটি কেস হিসাবে উল্লেখ করা হয়েছে এবং এটি বিশেষভাবে নমনীয় নয় তবে আপনাকে শুরু করার পক্ষে এটি যথেষ্ট হওয়া উচিত।

প্রতারণা

আমি একটি প্লাগইন লিখেছিলাম যা আপনাকে যে কোনও কাস্টম পোস্ট ধরণের জন্য পার্মস্ট্রাস্টিকগুলি সংজ্ঞায়িত করতে দেয়, তবে আপনি যেমন %category%পোস্টের জন্য পার্মালিঙ্ক কাঠামোতে ব্যবহার করতে পারেন আমার প্লাগইন %custom_taxonomy_name%আপনার যে কোনও কাস্টম ট্যাক্সনোমির জন্য সমর্থন করে custom_taxonomy_nameযেমন আপনার ট্যাক্সনোমির নাম যেমন where %club%

শ্রেণিবদ্ধ / অ-স্তরক্রমিক ট্যাক্সনোমির সাথে আপনি যেমন প্রত্যাশা করতেন এটি কাজ করবে It

http://wordpress.org/extend/plugins/wp-permastructure/


1
প্লাগইন দুর্দান্ত, তবে আপনি কীভাবে আপনার প্লাগইন ছাড়াই প্রশ্নের সমাধান করতে পারবেন তা ব্যাখ্যা করতে পারেন?
ইউজিন মানুয়িলভ

সে ব্যাপারে আমি সম্মত এটা আছে (আমি এটি ঠিকা এবং এটি প্রথম এই Q এ আমার মন থেকে এসেছে আছে) এটা মোকাবেলার প্লাগ হয় দারুণ, কিন্তু উত্তর কি সমস্যা এবং কিভাবে প্লাগইন এটা জিত সংক্ষিপ্ত সারসংক্ষেপ থেকে উপকৃত হবে। :)
প্রথম

@ ইউজিনমানুইলভ ঠিক আছে, দুঃখিত, এটি একটি দীর্ঘ উত্তর। এটি আমার সাথে এটি বেসিকগুলিতেও নামাচ্ছে!
সানচোথফাত

দেখে মনে হচ্ছে প্রথমটি $permalink = home_url(...ওভাররাইড হয়ে যায় $permalink = user_trailingslashit(...এবং কখনই ব্যবহার হয় না। নাকি আমি কিছু মিস করছি? $post_linkএমনকি সংজ্ঞায়িত করা হয় না। এটা অনুমিত ছিল $permalink = user_trailingslashit( $permalink, 'single' );?
ইয়ান ডান

ভাল ধরা, এটি করা উচিত $permalinkনয় $post_link। চিয়ার্স :)
সানচিথেফাত

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 টি সহজ সমাধান শুধু এই প্লাগ-ইন ব্যবহার করতে হয়: wordpress.org/plugins/custom-post-type-permalinks পুরোপুরি কাজ
জুলে

হ্যাঁ, তবে এটি যদি আপনার একক কাস্টম পোস্ট টাইপ থাকে তবে যদি আপনার একক থিমে একাধিক কাস্টম পোস্ট প্রকার থাকে তবে উপরের সমাধানটি। তবুও এটি আপনার বিভাগের স্লাগকে আপনার পোস্ট টাইপের স্লাগের মতোই পরিবর্তন করে।
বর্ষা ধাডগে

1

আমি একটি সমাধান পেয়েছি !!!

(অন্তহীন গবেষণার পরে .. আমার কাছে কাস্টম পোস্ট টাইপ পারমলিংক থাকতে পারে:
example.com/category/sub_category/my-post-name

এখানে কোড (ফাংশন.ফপি বা প্লাগইনে):

//===STEP 1 (affect only these CUSTOM POST TYPES)
$GLOBALS['my_post_typesss__MLSS'] = array('my_product1','....');

//===STEP 2  (create desired PERMALINKS)
add_filter('post_type_link', 'my_func88888', 6, 4 );

function my_func88888( $post_link, $post, $sdsd){
    if (!empty($post->post_type) && in_array($post->post_type, $GLOBALS['my_post_typesss']) ) {  
        $SLUGG = $post->post_name;
        $post_cats = get_the_category($id);     
        if (!empty($post_cats[0])){ $target_CAT= $post_cats[0];
            while(!empty($target_CAT->slug)){
                $SLUGG =  $target_CAT->slug .'/'.$SLUGG; 
                if  (!empty($target_CAT->parent)) {$target_CAT = get_term( $target_CAT->parent, 'category');}   else {break;}
            }
            $post_link= get_option('home').'/'. urldecode($SLUGG);
        }
    }
    return  $post_link;
}

// STEP 3  (by default, while accessing:  "EXAMPLE.COM/category/postname"
// WP thinks, that a standard post is requested. So, we are adding CUSTOM POST
// TYPE into that query.
add_action('pre_get_posts', 'my_func4444',  12); 

function my_func4444($q){     
    if ($q->is_main_query() && !is_admin() && $q->is_single){
        $q->set( 'post_type',  array_merge(array('post'), $GLOBALS['my_post_typesss'] )   );
    }
    return $q;
}

-2

আপনার কোডটি নিয়ে আপনার বেশ কয়েকটি ত্রুটি রয়েছে। আমি আপনার বিদ্যমান কোডটি পরিষ্কার করেছি:

<?php
function jcj_club_post_types() {
  $labels = array(
    'name' => __( 'Jazz Clubs' ),
    'singular_name' => __( 'Jazz Club' ),
    'add_new' => __( 'Add New' ),
    'add_new_item' => __( 'Add New Jazz Club' ),
    'edit' => __( 'Edit' ),
    'edit_item' => __( 'Edit Jazz Clubs' ),
    'new_item' => __( 'New Jazz Club' ),
    'view' => __( 'View Jazz Club' ),
    'view_item' => __( 'View Jazz Club' ),
    'search_items' => __( 'Search Jazz Clubs' ),
    'not_found' => __( 'No jazz clubs found' ),
    'not_found_in_trash' => __( 'No jazz clubs found in Trash' ),
    'parent' => __( 'Parent Jazz Club' ),
    );
  $args = array(
    'public' => true,
    'show_ui' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'menu_position' => 5,
    'query_var' => true,
    'supports' => array( 'title','editor','comments','revisions','trackbacks','author','excerpt','thumbnail','custom-fields' ),
    'rewrite' => array( 'slug' => 'jazz-clubs-in', 'with_front' => true ),
    'has_archive' => true
    );
  register_post_type( 'jcj_club', $args );
  }
add_action( 'init','jcj_club_post_types' );
?>

উপরের কোড সহ আপনার কোডটি প্রতিস্থাপন করুন এবং দেখুন এটি কার্যকর হয় কিনা। আপনার আরও প্রশ্ন থাকলে জবাব দিন এবং আমি সাহায্য করার চেষ্টা করব।

সম্পাদনা করুন:

আমি লক্ষ্য করেছি আমি বাইরে চলে এসেছি 'has_archive' => true

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