বিদ্যমান পোস্টের ধরণটি সংশোধন করতে রেজিস্টার_পোস্ট_প্রকার () ব্যবহার করুন


29

এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে কোনও থিম বা প্লাগইন কোনও পোস্ট ধরণের নিবন্ধন করে এবং আপনি এটি সংশোধন করতে চান। অবশ্যই আছে add_post_type_support()এবং remove_post_type_support()তবে সেগুলি আর্গুমেন্টগুলির সম্পূর্ণ তালিকাতে অ্যাক্সেস দেয় না register_post_type()। বিশেষত, আমি পোস্টের ধরণের সংরক্ষণাগারটি অক্ষম করতে চাইছি, অ্যাডমিন ইউআইকে লুকিয়ে রাখতে পারি, অনুসন্ধান থেকে আড়াল করে রাখতে পারি post

জন্য কোডেক্স পৃষ্ঠাregister_post_type() আমার সামনে dangles এই:

বিবরণ

পোস্টের ধরণ তৈরি করুন বা সংশোধন করুন।

তবে অতীতে, যখন আমি এটি করার চেষ্টা করেছি তখন মনে হয় এটি কাজ করে না। এই ফাংশনটি কি সত্যিই পোস্টের ধরণের সংশোধন করার জন্য, এবং যদি তাই হয় তবে আপনি কেবল কয়েকটি যুক্তি পুনরায় ঘোষণা করতে পারেন এবং বাকীটি একা রেখে যেতে পারেন?

দেখতে দেখতে যে এমনকি একটি নয় deregister_post_type()ফাংশন , আমি বুঝতে পারছি না কিভাবে এটা করা যাবে।

উত্তর:


18

এই ফাংশনটি কি সত্যিই পোস্ট ধরণের পরিবর্তন করার জন্য

হ্যাঁ।

এবং যদি তা হয় তবে আপনি কি কেবল কয়েকটি যুক্তি পুনরায় ঘোষণা করতে পারেন এবং বাকীটি একা রেখে যেতে পারেন?

না। আপনি যদি কোনও পোস্টের ধরণের আর্গুমেন্টগুলি সংশোধন করতে চান তবে আপনাকে get_post_type_objectপোস্ট টাইপ অবজেক্টটি পেতে, এটিতে যা চান তা পরিবর্তন করতে হবে, তারপরে নতুন mod আরগস প্যারামিটার হিসাবে আপনার পরিবর্তিত প্রকারটি ব্যবহার করে এটি পুনরায় নিবন্ধভুক্ত করুন।


একই সাথে সংশোধিত যুক্তি দিয়ে পরপর দুটি কল করা register_post_typeকি সঠিক হবে? আমি আপনার "হ্যাঁ" দ্বারা এটি ধরে নিয়েছি এবং এটি কোনও ত্রুটি ডাম্প করে না এবং পছন্দসই প্রভাব ফেলে। আসল
কেসটি হ'ল

হ্যাঁ, এটি কাজ করে তবে মনে হয় আপনি যদি তা করতেই থাকেন তবে একই পোস্ট বারবার বারবার নিবন্ধ রোধ করতে আপনাকে কিছু ফিল্টার বা অন্য কিছু যুক্ত করতে হবে। মূলত, প্রথমে আর্গুমেন্টগুলি সাজান, তারপরে এটি নিবন্ধ করুন।
অটো

প্লাগিনের ঠিক আগে সরবরাহ করা হুকের কারণে আমি এটি সম্পর্কে ভেবেছিলাম register_post_type। বাস্তবে, দরকার নেই। প্রতিক্রিয়ার জন্য ধন্যবাদ এটি একটি "রেকর্ডগুলির জন্য" প্রশ্ন ছিল।
brasofilo

34

কিছু গবেষণা করার পরে আমি খুঁজে পেলাম যে এর উত্তরগুলির কোনওটিই আপ টু ডেট নয়।

8 ই ডিসেম্বর, 2015 পর্যন্ত ওয়ার্ডপ্রেসে একটি নতুন ফিল্টার অন্তর্ভুক্ত রয়েছে register_post_type_args, যা আপনাকে নিবন্ধিত পোস্ট ধরণের আর্গুমেন্টগুলিতে ঝুঁকতে দেয়।

function wp1482371_custom_post_type_args( $args, $post_type ) {
    if ( $post_type == "animal-species" ) {
        $args['rewrite'] = array(
            'slug' => 'animal'
        );
    }

    return $args;
}
add_filter( 'register_post_type_args', 'wp1482371_custom_post_type_args', 20, 2 );

6
এটি এখন এটি করার সঠিক উপায়।
ডেভ রোমসে

6
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
ক্লিভিস

রানটাইমে নিবন্ধিত হওয়ার পরে যদি আপডেট করার দরকার হয় তবে কী হবে? উদাহরণস্বরূপ: পরেinit
লুকাস বুস্তামন্তে

@ লুকাসবুস্তামন্তে এতে কিছু আসে যায় না। আপনার প্লাগইন / থিম চলাকালীন কেবল 'add_filter' লাইন কল করুন, কোনও ক্রিয়ায় নয়। প্রতিটি register_post_typeফাংশন চলাকালীন ফিল্টার কল করা হবে । পোস্টের ধরণটি সঠিকভাবে নিবন্ধিত না করা হলে আমার কোডটি কাজ করবে না এমন একমাত্র পরিস্থিতি। সমস্ত পোস্টের প্রকারগুলি হুকের সময় নিবন্ধিত করা উচিত should কোডেক্স থেকে: "রেজিস্টার_পোস্ট_প্রকারটি 'ইআরআই' এর আগে ডাকা হলে কাজ করবে না এবং নতুনভাবে তৈরি বা পরিবর্তিত পোস্টের ধরণের দিকগুলি পরে ডাকলে ভুলভাবে কাজ করবে।" যদি আপনার এখনও সহায়তা প্রয়োজন হয় তবে আমি একটি নতুন প্রশ্নে আরও বিশদ পোস্ট করার পরামর্শ দিচ্ছি।
র‌্যাডলি সাস্টায়ার

8

'registered_post_type'অন্য প্লাগইনে কোনও পোস্টের ধরণ পরিবর্তন করতে কীভাবে ফিল্টারটি ব্যবহার করতে হয় তার একটি উদাহরণ এখানে ।

আমি যে প্লাগিনটি ব্যবহার করেছিলাম তার সংজ্ঞায় মেনু_ আইকন অন্তর্ভুক্ত করা হয়নি, তাই আমি নিজের একটি যুক্ত করতে চাই।

<?php
/**
 * Add a menu icon to the WP-VeriteCo Timeline CPT
 *
 * The timeline plugin doesn't have a menu icon, so we hook into 'registered_post_type'
 * and add our own.
 *
 * @param  string $post_type the name of the post type
 * @param  object $args the post type args
 */
function wpse_65075_modify_timeline_menu_icon( $post_type, $args ) {
    // Make sure we're only editing the post type we want
    if ( 'timeline' != $post_type )
        return;

    // Set menu icon
    $args->menu_icon = get_stylesheet_directory_uri() . '/img/admin/menu-timeline.png';

    // Modify post type object
    global $wp_post_types;
    $wp_post_types[$post_type] = $args;
}
add_action( 'registered_post_type', 'wpse_65075_modify_timeline_menu_icon', 10, 2 );

এটি বেশিরভাগ ক্ষেত্রে এটি করার একটি খুব পরিষ্কার উপায়; যাইহোক, এটি লক্ষ করা উচিত যে এই ফিল্টারটি পুনরায় লেখার জন্য বাছাই করতে খুব দেরি হয়েছে সুতরাং সেই পরিস্থিতিতে পরিবর্তে গ্রহণযোগ্য উত্তরটি অবশ্যই ব্যবহার করা উচিত।
mrwweb

4

'registered_post_type'অন্যান্য কোড এটি নিবন্ধভুক্ত করার পরে হুক ইন । এটা তোলে শেষে বলা হয় register_post_type()। আপনি দুটি যুক্তি পেতে পারেন: $post_typeএবং $args
এখন আপনি এই পোস্টের ধরণের জন্য যে কোনও কিছু পরিবর্তন করতে পারবেন। পরিদর্শন করুন $GLOBALS['wp_post_types']কিছু অপশন জন্য।


আমাকে এই হুকের দিকে নির্দেশ করার জন্য ধন্যবাদ এটি কোনও পোস্টের ধরণকে কীভাবে সংশোধন করবেন সে সম্পর্কে (আরও গুরুত্বপূর্ণ) প্রশ্নের উত্তর দেয় তবে এর register_post_type()মধ্যে "সংশোধন" এর বিবরণ সম্পর্কে কী বলা যায় ? এটা কি ঠিক ভুল? আমি কি আমার ইন্টারনেট ঘোড়ায় চড়ব এবং এই মুহুর্তে কোডেক্স থেকে এটি পরাজিত করব?
mrwweb

2
$wp_post_types[$post_type] = $args;... পরামর্শ দেয় যে আপনার বৈশিষ্ট্যগুলি পরিবর্তন করতে সক্ষম হওয়া উচিত। আপনার প্রশ্নে ব্যর্থ কোডের একটি উদাহরণ যুক্ত করুন।
ফুসিয়া

0

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

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

function tribe_modify_organizer() {
 //New arguments
    $tribe_organizer_args = get_post_type_object('tribe_organizer'); // get the post type to modify
    $tribe_organizer_args-> taxonomies = array('post_tag' , 'tribe_events_cat'); // add taxonomies support
    $tribe_organizer_args-> exclude_from_search = false; // show in search result
 //re-register the same post type includeing the new args
    register_post_type( 'tribe_organizer', $tribe_organizer_args );
}
add_action( 'init', 'tribe_modify_organizer', 100 );

0

আমি জানি না এটি কুরুচিপূর্ণ কিনা তবে আপনি GLOBALযখনই কোনও একক তর্ককে ম্যানিপুলেট করার প্রয়োজন তখন আপনি "ফ্লাইতে" স্থানধারককে পরিবর্তন করতে পারেন । contentsঅ্যাডমিন মেনুতে গ্রহণযোগ্য হতে আমরা এইভাবে কোনও সর্বজনীন পোস্ট টাইপ ব্যবহার করি । আমরা মেনুটি রেন্ডার করার আগে এবং কাছাকাছি বন্ধ করতাম:

function entex_theme_make_contents_public(){
    $GLOBALS['wp_post_types']['contents']->public = true;
}
add_action('admin_menu', 'entex_theme_make_contents_public', 10);

function entex_theme_make_contents_private_again(){
    $GLOBALS['wp_post_types']['contents']->public = '';
}
add_action('admin_menu', 'entex_theme_make_contents_private_again', 12);

আমাদের ক্ষেত্রে আমরা অ্যাডমিন মেনু পোস্ট তালিকার প্লাগইনটি আমাদের পোস্টের ধরণটি গ্রহণ করতে চাই, কারণ তারা return get_post_types(array('public' => true));অগ্রাধিকার 11 সহ তাদের হুকের অভ্যন্তরে কল করে ...

বিকাশকারীগণ - দয়া করে একটি মন্তব্য করুন যদি এটি কোনও সমস্যার সমাধান করতে পারে।

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