একটি কাস্টম পোস্ট ধরণের সুনির্দিষ্ট কাস্টম টেকনোমি


29

আমি একটি কাস্টম ট্যাক্সনমি তৈরি করতে চাই যা কোনও বিভাগের সাথে ডিফল্ট পোস্টগুলির সাথে একই রকম আচরণ করে (/% বিভাগ% /% পোস্টনাম% / পারমিলিং কাঠামোর ভিত্তিতে) যাতে কাস্টম পোস্টের ধরণের পোস্টগুলি হয় www.example.com/custom-post-type/custom-taxonomy-name/post-name হিসাবে প্রদর্শিত হবে এছাড়াও আমি চাই বিভাগের মেটা বক্সটি কেবলমাত্র যখন আমরা নতুন ডিফল্ট পোস্ট যুক্ত করি তখনই প্রদর্শিত হয় এবং যখন আমরা কাস্টমটিতে কোনও নতুন পোস্ট যুক্ত করি না পোস্ট প্রকার এবং কাস্টম ট্যাক্সনমি বাক্সটি কেবল তখনই প্রদর্শিত হয় যখন আমরা কাস্টম পোস্ট প্রকারে একটি নতুন পোস্ট যুক্ত করি এবং যখন আমরা কোনও ডিফল্ট পোস্ট যুক্ত করি না।

উত্তর:


46

প্রথমত যদি আপনি কেবলমাত্র কাস্টম পোস্ট টাইপ করে করশক্তি মেটাবক্সটি দেখাতে চান তবে রেজিস্টার_ট্যাক্সোনমিতে যুক্তি হিসাবে কাস্টম পোস্ট প্রকারের নামটি পাস করে কেবল সেই কাস্টম পোস্ট টাইপটিতে বিভাগটি নিবন্ধন করুন। এটি করার মাধ্যমে বিভাগের মেটাবক্স কেবলমাত্র কাস্টম পোস্ট টাইপের ক্ষেত্রে উপস্থিত হয়। আপনি যদি কাস্টম পোস্টের ধরণে বিভাগের মেটাবক্সটি দেখাতে না চান তবে কাস্টম পোস্টের প্রবন্ধটি রেজিস্ট্রেশন করার সময় আর্গুমেন্ট হিসাবে শব্দটি সরিয়ে ফেলুন এবং পরিবর্তে এই 'ট্যাক্সনোমিজ' => অ্যারে ('পোস্ট_ট্যাগ', 'আপনার_ট্যাক্সনোমি_নাম') এর মতো ট্যাক্সোনমি স্লাগ নাম অন্তর্ভুক্ত করুন) । আমি কোডটি কীভাবে অর্জন করেছি তা এখানে। আমি কাস্টম পোস্ট ধরণের থিমের অধীনে স্লাগ থিম_ক্যাটরিজগুলি সহ একটি কাস্টম ট্যাক্সনমি নিবন্ধভুক্ত করেছি


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 প্যারামিটারটি কাস্টম পোস্ট টাইপ স্লাগ নামে পরিবর্তন করুন এবং অন্যটি 'স্লাগ' => 'কাস্টম_পোস্ট_টাইপ_স্লাগ /% ট্যাক্সনোমি_স্লাগ% হিসাবে পুনর্লিখনের স্লাগ নাম পরিবর্তন করুন

এখন আপনি যখন রাইট পোস্টের ধরণ পৃষ্ঠায় একটি নতুন পোস্ট প্রকার যুক্ত করবেন ... আপনি http://www.example.com/wordpress/themes/%themes_categories%/post-name/ হিসাবে পারমালিঙ্কটি দেখতে পাবেন । যদি এই পোস্টের জন্য কাস্টম বিভাগটি নির্বাচন না করা হয় তবে পারমালিংকটি http://www.example.com/wordpress/themes/%themes_categories%/post-name/ থেকে যাবে যা তারপরে একটি খারাপ অনুরোধ প্রদর্শন করবে। এটি সংশোধন করার জন্য আমরা কাস্টম বিভাগে একটি ডিফল্ট শব্দ তৈরি করি। (বিভাগগুলিতে শ্রেণিবদ্ধ হিসাবে একই) এটি ফাংশন.এফপিতে যুক্ত করুন

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/ হয়ে যায় la

শেষ পর্যন্ত অ্যাডমিন বিভাগে পারমলিংক সেটিং পরিবর্তনগুলি সংরক্ষণ করে ক্লিক করে পুনর্লিখনটি ফ্লাশ করতে ভুলবেন না অন্যথায় আপনাকে 404 ত্রুটিতে পুনর্নির্দেশ করা হবে। আশা করি এটি আপনাকে সহায়তা করবে।


আরে, আমার একটি সমস্যা ছিল ... যখন আমরা প্রতিধ্বনিটি সংরক্ষণ_আক্কের লিঙ্কটি প্রতিবেদনের মাধ্যমে get_the_term_list ($ পোস্ট-> আইডি, $ শ্রেনী, '', ',', '') ব্যবহার করে আউটপুট করি; তারপরে লিঙ্কটি www.example.com/taxonomy-term হিসাবে প্রদর্শিত হবে এবং www.example.com/themes/taxonomy-term হিসাবে নয়। আমি মনে করি এটির জন্য আমাদের একটি HTACESS বিধি লিখতে হবে।
সৌরভ গোয়েল

+1, দুর্দান্ত ব্যাখ্যা, ধাপে ধাপে অনুসরণ এবং এটি কাজ করে, ওয়ার্ডপ্রেস ৩.৪.২-এ পরীক্ষা করা হয়েছে
অ্যালেক্স ভ্যাং

1
আমি ভাবছিলাম: কাস্টম পোস্টের ধরণটি নিবন্ধ করার সময় আপনার কি ট্যাক্সনোমির অ্যারেতে কাস্টম শৃঙ্খলা যুক্ত করতে হবে? কারণ এটি এটি যুক্ত না করেই কাজ করছে বলে মনে হচ্ছে (আপনি যদি ইতিমধ্যে কাস্টম পোস্টের ধরণে কোনও শুল্ক নিবন্ধন করেন)। উৎসুক.
ট্রেইনোসিস

ইউআরএল পরিবর্তন করতে আপনার পুনর্লিখনটি ব্যবহার করার সময় সিপিটি ইউআই প্লাগইন দিয়ে এটি ব্যবহার করে দেখুন। সব ভাল লাগছে। ইউআরএলগুলি সমস্ত সঠিক এবং আমি পারমালিক্সগুলি পুনরায় সেট করি, তবে প্রকৃত পোস্টগুলি 404 নিক্ষেপ করছে: দেখে মনে হচ্ছে! ইয়াহ!
গারকনিস

1

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