কোনও পোস্ট তৈরি করার সময় ডিফল্ট কাস্টম ক্ষেত্রগুলি সেট করার কোনও উপায় আছে কি?


11

যখন আমি একটি নতুন পোস্ট তৈরি করছি , যখন "নতুন যুক্ত করুন" ক্লিক করার পরে , যখন পোস্ট সম্পাদকটি ড্রপডাউনটি ব্যবহার না করে ব্যবহার করার জন্য একটি কাস্টম ফিল্ড বেছে নেওয়ার পরিবর্তে দেখায়, আমি ইতিমধ্যে কিছু ডিফল্ট কাস্টম ফিল্ড ইনপুট রাখতে চাই openend।

পরিবর্তে দৃশ্যমান:

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

আমি এর মতো কিছু পেতে চাই:

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

আমি জানি যে এর জন্য (সিপিটি, আরও ক্ষেত্রগুলি ইত্যাদি) প্লাগইন রয়েছে তবে আমি এটি একটি বেসিক ফাংশন দিয়ে করার একটি সহজ উপায় চাই।

আমি এই জাতীয় কিছু চেষ্টা করেছি (আমি একটি কাস্টম পোস্ট ধরণের 'পণ্য' ব্যবহার করছি):

function register_custom_fields( $post_ID ) {

    global $wpdb;

        if( !wp_is_post_revision( $post_ID ) ) {

            add_post_meta( $post_ID, 'reference', '', true);
            add_post_meta( $post_ID, 'price', '', true);

        }

}

add_action('edit_product', 'register_custom_fields');

তবে তাতে কাজ হবে বলে মনে হচ্ছে না। আমি মনে করি যে হুকটি সম্ভবত ভুল (কারণ edit_postএকটি আপডেটের পরে আসে) তবে আমি "নতুন পোস্ট" এর জন্য কোনও হুক দেখতে পাই না (ডাব্লুপিপি প্রশাসকের "নতুন পোস্টে" ব্যবহারকারী ক্লিক করার ঠিক পরে)। কোন আছে?

বা সম্ভবত পুরো ধারণাটি ভুল এবং অন্য উপায় আছে?

উত্তর:


9

অ্যাকশন হুকটি save_postসেভ করার জন্য আহ্বান জানানো হয়েছে, তবে আপনি এই মুহুর্তে মেটাডেটা যুক্ত করতে পারেন কিনা তা আমি জানি না। তবে পোস্টটি অ্যাকশন হুক দিয়ে সংরক্ষণ করার পরে আপনার মেটা ডেটা তৈরি / আপডেট করা সম্ভব হবে updated_post_meta

সম্পাদনা

পোস্ট তৈরির স্ক্রিনে কিছু মেটা ক্ষেত্র (কাস্টম ক্ষেত্র) প্রাক-নির্বাচন করতে, আপনাকে এই মেটা মানগুলি প্রথমে খালি মান যুক্ত করতে হবে।

আপনি যদি ফাইলে post_custom_meta_box()ফাংশনটি (যা ব্যবহৃত মেটাবক্সের কলব্যাক postcustom) wp-admin/includes/meta-boxes.phpদেখেন তবে দেখতে পাবেন যে ফাংশনটি list_meta()প্রাক-নির্বাচিত মেটা ক্ষেত্রগুলি তৈরি করতে ব্যবহার করছে।

এই মেটাবক্সটি প্রদর্শিত না হওয়া পর্যন্ত এখন প্রোগ্রামের প্রবাহটি একবার দেখে নেওয়া যাক (আমরা এখানে ব্যবহার করতে পারি এমন কোনও ক্রিয়া / ফিল্টার হুকের সন্ধান করছি):

  1. ওয়ার্ডপ্রেস ফাইল লোড করে post-new.php
  2. এই ফাইলটি 39ফাংশনের সাথে মিল রেখে ডাটাবেসে একটি ডিফল্ট পোস্ট উত্পন্ন করে get_default_post_to_edit()। ওটা সুন্দর. মূলত পোস্টটি ইতিমধ্যে একটি অটো-ড্রাফ্ট হিসাবে ডাটাবেজে রয়েছে। দুর্ভাগ্যক্রমে এই ডেটা পরিবর্তন করতে বা নতুন কিছু যুক্ত করার জন্য কোনও হুক নেই।
  3. পরবর্তী পদক্ষেপ হিসাবে, ফাইলটি edit-form-advaned.phpঅন্তর্ভুক্ত করা হয়েছে। এই ফাইলটি গর্ত অ্যাডমিন পৃষ্ঠা তৈরি করবে এবং supportsপোস্ট ধরণের প্যারামিটারের ভিত্তিতে সমস্ত প্রয়োজনীয় মেটাবক্সগুলি অন্তর্ভুক্ত করবে ।
  4. লাইনে 136কাস্টম ক্ষেত্রগুলি মেটাবক্সকে postcustomঅন্তর্ভুক্ত করা হয় এবং উপরের ফাংশনটি বলা হয়। আবার, কোনও অ্যাকশন হুক যা আমরা ব্যবহার করতে পারি।

উপসংহার

আমি মনে করি আপনি করতে পারেন একমাত্র উপায় jQuery ব্যবহার করা বা postcustomমেটাবক্স ওভারলোড করা এবং আপনি list_meta()ফাংশনটি চালানোর আগে মেটা মান যুক্ত করা ।

যেমন

add_action('admin_menu', 'wpse29358_replaceMetaBoxes'); // maybe add_meta_boxes hook
function wpse29358_replaceMetaBoxes() {
    remove_meta_box('postcustom', {POST_TYPE}, 'normal');
    add_meta_box('postcustom', __('Custom Fields'), 'wpse29358_postcustomMetabox', {POST_TYPE}, 'normal', 'core');
}

function wpse29358_postcustomMetabox($post) {
    // Add your meta data to the post with the ID $post->ID
    add_post_meta($post->ID, 'key', 'value');

    // and then copy&past the metabox content from the function post_custom_meta_box()
}

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

আহ। এখন আমি আপনার সমস্যা বুঝতে পারি। আমি আমার উত্তর সম্পাদনা করেছি।
rofflox

3

এটি কাস্টম ক্ষেত্র সমর্থন যুক্ত করার উপযুক্ত পদ্ধতি (পোস্টগুলি সম্পাদনার সময় আপনি ফাঁকা ক্ষেত্রগুলি পাবেন না)

function set_default_meta($post_ID){
    $current_field_value = get_post_meta($post_ID,'Sort Order',true);
    $default_meta = '100'; // value
    if ($current_field_value == '' && !wp_is_post_revision($post_ID)){
            add_post_meta($post_ID,'Sort Order',$default_meta,true);
    }
    return $post_ID;
}
add_action('wp_insert_post','set_default_meta');

1

আপনার সেভ_পোস্ট ক্রিয়াটি ব্যবহার করা উচিত এবং পোস্টের প্রকারটি পরীক্ষা করে আপনার ক্রিয়াকলাপটি আলাদা করে দেওয়া উচিত কারণ এটি সমস্ত পোস্টের ধরণে চলে। স্পষ্টতই আরও কিছু যুক্তি রয়েছে যা আপনাকে এটিকে কাজে লাগানোর জন্য তৈরি করতে হবে। আপনার সম্ভবত একটি পোস্ট মেটা ক্ষেত্র সেট করা উচিত যা একবার আপনি ডিফল্ট সেট করে ফেলেছেন কিনা তা যাচাই করে নিন যাতে আপনার ব্যবহারকারীরা কোনও পোস্ট মেটা ক্ষেত্রটি ফাঁকা রাখতে চান তবে হতাশ হবেন না।

যদি আপনি চান ডিফল্টগুলি নাল হতে চান (যেমন আপনার কোড উদাহরণে দেখা যায়), তবে কোনও ফাংশন তৈরি করবেন না কারণ এটি কেবল ওভারহেড যুক্ত করে এবং পোস্ট মেটা ক্ষেত্রগুলি ডিফল্টরূপে মান সহ পপুলেট হয় না।

function register_custom_fields( $post_ID ) {
    //Do nonce checking here
    if( !wp_is_post_revision( $post_ID ) ) {
        if('product' === $_REQUEST['post_type']){
            $reference = $_REQUEST['reference'] ? esc_html($_REQUEST['reference']) : 'default_value';
            $price = $_REQUEST['price'] ? esc_html($_REQUEST['price']) : 'default_value';
            update_post_meta( $post_ID, 'reference', $reference);
            update_post_meta( $post_ID, 'price', $price);
        }
    }
}
add_action('save_post', 'register_custom_fields');

1

আমি যে ডাব্লুপি সাইটটি বিকাশ করছি তার প্রতিটি কাস্টম পোস্টের জন্য আমি একটি অনন্য মেটা বিবরণ পেতে চাই। সুতরাং আমি একটি ডিফল্ট কাস্টম ক্ষেত্রও খুঁজছিলাম এবং এখানে অবতরণ করেছি।

আমি জানি এটি একটি বেশ পুরানো পোস্ট, তবে আমি ভেবেছিলাম যে মারিয়োকোস্টেলাক.কম- এ পাওয়া সহজ উত্তরটি পোস্ট করব

কেজি আমার নামস্থান, আপনি যা পছন্দ করেন তার ফাংশনটির নাম দিতে পারেন। আমি সাধারণভাবে হুক এবং ডাব্লুপি কাস্টমাইজ করার ক্ষেত্রে বেশ নতুন, তবে আমি বিশ্বাস করি যে আপনি যে হুকটি সন্ধান করছেন তাতে wp_insert_post।

add_action('wp_insert_post', 'kg_set_default_custom_fields');

function kg_set_default_custom_fields($post_id)
{
    if ( $_GET['post_type'] != 'page' ) {
        add_post_meta($post_id, 'meta-description', '', true);
    }

    return true;
}

এফওয়াইআই: আছে get_post_type()। এছাড়াও, আলগা তুলনা করার সময়, আপনার YODA স্টাইল শর্তের সিনট্যাক্স ব্যবহার করা উচিত।
কায়সার

@ কাইজার আপনি YODA শৈলীর অর্থ কী? এছাড়াও এর get_post_type($post_id) চেয়ে ভাল কেন $_GET['post_type']?
আজিজ

1
ব্যবহার করুন মান তুলনা আগে: 'page' === $_GET['post_type']। অন্যথায়, আপনি যখন কোনও এককটি ভুলে =যান তখন আপনি এমন পরিস্থিতিতে শেষ করতে পারেন যেখানে আপনি দুটি মানের তুলনার পরিবর্তে কোনও মান নির্ধারণ করেন । এবং এটি আপনার ডেটাবেজে আবর্জনা হিসাবে শেষ হবে। আপনি === টাইপ নিরাপদ তুলনাও ব্যবহার করতে চাইতে পারেন (মানটি pageকি এবং প্রকারের মান string?)
কায়সার

1
@kasier আমি দেখতে - তাই চূড়ান্ত কোড ভালো কিছু হল: 'page' === get_post_type($post_id) ?
আজিজ

-1

যদি কারও যদি পোস্টের প্রকারে কাস্টম ফিল্ডের প্রয়োজন হয় তবে আমি নীচে কোডটি রেখে দিয়েছি এবং আমার জন্য ভাল কাজ করেছে :)

function awh_field_type($post_id){
$awh_f_post = get_post_type($post_id);
$meta_value = '';
$meta_name = 'custom';
    if($awh_f_post == 'product'){
        add_post_meta($post_id,$meta_name,$meta_value,true);
    }
return $awh_f_post;

} যোগ_অ্যাকশন ('wp_insert_post', 'আঃ_ফিল্ড_টাইপ');

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