হুক করার সঠিক উপায়টি যখন আপডেট পোস্ট হয়


19

পোস্ট আপডেট হওয়ার পরে আমি হুক করার চেষ্টা করি তবে সব হুক ছাড়া আমি কখনই মৃত্যুদন্ড কার্যকর করার চেষ্টা করি না updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

আমি এটি চেষ্টা করেছি add_action('save_post', 'my_function');কিন্তু কোনও আইডি প্রতিধ্বনিত হয়নি, বা এই বার্তাটি ইতিমধ্যে প্রতিধ্বনিত হয়েছে তবে পুনর্নির্দেশ শিরোলেখের কারণে কখনও রেন্ডার হয় না।


2
আপনার পরে একটি জায়গা আছে save_post, এটি কি এখানে টাইপো আছে, বা এটি আপনার মূল কোডটিতে ছিল? এছাড়াও, বিকাশকালে ডিবাগিং সক্ষম করুন
মিলো

@ মিলো দুঃখিত টাইপো, তবে আসল কোডে নয়
যথাযথ

যদি এটি হয় তবে নতুন পোস্ট তৈরি করার সময় আপনার পর্দার উপরের বাম কোণে আপনার আউটপুটটি দেখতে হবে। কোনও বিদ্যমান পোস্ট সংরক্ষণ করা পুনর্নির্দেশের আগে ঘটে, তাই আপনি ডিবাগিং সক্ষম না করে আপনি কিছুই দেখতে পাবেন না।
মিলো

উত্তর:


55

যখন কোনও পোস্ট আপডেট হয় সেখানে কিছু হুক থাকে যা বহিস্কার হয়:

  • 'pre_post_update'পোস্ট আপডেট হওয়ার ঠিক আগে বরখাস্ত করা একটি ক্রিয়া , আর্গুমেন্টটি 2 হয়: $post_IDএবং এটি পোস্ট টেবিলের অন্যান্য সমস্ত ডাটাবেস কলমের $dataএকটি অ্যারে
  • 'transition_post_status'আপডেটে চালিত একটি হুক এবং 3 টি আর্গুমেন্ট পাস করুন: _ new_post_status, $old_post_statusএবং $post(অবজেক্ট)।
  • তারপরে, আরও 2 টি রূপান্তর হুক গুলি ছুঁড়েছে, তবে সেগুলি নামক গতিশীল, এর অর্থ হল কার্যকর কার্যকর কর্মটি পুরানো এবং নতুন পোস্টের স্থিতির উপর নির্ভর করে। "{$old_status}_to_{$new_status}"এবং "{$new_status}_{$post->post_type}"। প্রথমে একমাত্র পোস্ট অবজেক্টটি আর্গুমেন্ট হিসাবে পাস করুন, দ্বিতীয়টি পোস্ট আইডি এবং পোস্ট অবজেক্টটি পাস করুন। এখানে ডকুমেন্টেশন সন্ধান করুন
  • 'edit_post'যা 2 টি আর্গুমেন্ট পাস করে: $post_IDএবং $post(অবজেক্ট)
  • 'post_updated'যে পাস 3 আর্গুমেন্ট: $post_ID, $post_after(পোস্ট বস্তুর আপডেটের পরে), $post_before(পোস্ট বস্তুর আপডেট করার আগে)
  • আরেকটি গতিশীল হুক: "save_post_{$post->post_type}"যে পোস্টে ধরনের উপর নির্ভর করে, মান পোস্টের জন্য যেমন হয় 'save_post_post'এবং পৃষ্ঠাগুলি জন্য 'save_post_page', এই হুক পাস 3 আর্গুমেন্ট: $post_ID, $post(বস্তুর) এবং $updateযে একটি বুলিয়ান (সত্য বা মিথ্যা) যে সত্য হয় যখন আপনি একটি আপডেট সঞ্চালন হয়, মধ্যে কোনও পোস্ট প্রথমবারের জন্য সংরক্ষণ করা হয় তখন এই হুকটিও বহিস্কার করা হয়।
  • ' save_post' এটি আপডেটে এবং প্রথম সংরক্ষণে উভয়ই বরখাস্ত করা হয় এবং পূর্ববর্তী হুকের একই 3 টি যুক্তি পাস করে pass
  • ' save_post_{$post_type}' এটি আপডেটে এবং প্রথম সংরক্ষণে উভয়ই বরখাস্ত করা হয় এবং আগের হুকের একই প্রথম 2 টি আর্গুমেন্টটি পাস করে।
  • অবশেষে আপনার কাছে ' wp_insert_post' রয়েছে , এটি আপডেটে এবং প্রথম সংরক্ষণে উভয়ই বরখাস্ত করা হয়েছে এবং আগের 2 টি হুকের একই 3 টি যুক্তি পাস করুন।

এই হুক প্রতিবারই কোনও পোস্ট আপডেট হওয়ার পরে ব্যাকএন্ডে অ্যাডমিন পৃষ্ঠাগুলির মাধ্যমে এবং "ম্যানুয়ালি" ব্যবহার করে wp_update_postবা wp_insert_postফাংশনগুলির মাধ্যমে উভয়ই নিক্ষেপ করা হয়।

পোস্টটি অ্যাডমিন পৃষ্ঠাগুলি ব্যবহার করে আপডেট করা হলে অতিরিক্ত হুকগুলি বরখাস্ত করা হয়, এর একটি উদাহরণ 'update_post_redirect'বা 'post_updated_messages'। ( ব্যবহারের উদাহরণগুলির জন্য এটি এবং এই ডাব্লুপিএসই উত্তরগুলি দেখুন )।

মনে রাখবেন যে আপনি যদি কিছু হুক যুক্তি ব্যবহার করতে চান তবে এটি প্রথম নয়, আপনার এটি স্পষ্টভাবে add_actionকলটিতে ঘোষণা করতে হবে ।

যেমন আপনি ব্যবহার করতে চান তাহলে '$update'যুক্তি (3 য় যে) এর 'save_post'হুক আপনি যোগ করতে হবে 3যেমন $accepted_argsউপর PARAM add_action( ডক্স দেখুন ):

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

গত নোট বিষয়ে সময়জ্ঞান : আপনি যে নিশ্চিত হতে হবে add_actionবলা হয় সামনে কর্ম সূত্রপাত হয়, অথবা এটি কিছুই করতে হবে না।

যেমন এই কোড:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

কিছুই করবে না, কারণ হুক বরখাস্ত করার পরে ক্রিয়া যুক্ত করা হয়। এখানে এটি সনাক্ত করা সহজ, বাস্তব বিশ্বের কোড সর্বদা এটি হয় না।


আমি মনে করি ড্যাশবোর্ডে অ্যাড নিউ (পোস্ট, পৃষ্ঠা, সিপিটি) টিপানোর সময় 'সেভ_পোস্ট' অ্যাকশন হুকও বরখাস্ত করা হয়েছে। নিজেকে দেখতে এই কোডটি চালান। function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );'সেভ_পোস্ট' ক্রিয়াটি প্রকাশের পরিবর্তে অ্যাড নিউতে কেন চালিত হয়? অটো-ড্রাফ্ট পোস্ট করার জন্য আমি মনে করি।
lowtechsun

@ লোতেটসুন এ-তে যেমন বলা হয়, প্রতিবার কোনও পোস্ট আপডেট হওয়ার পরে হুক গুলি চালানো হয়, অর্থাৎ ডিবিতে সেভ করা হয়। পৃষ্ঠা লোডিংয়ের কাছাকাছি সময়ে যখন আপনি "নতুন যুক্ত করুন" টিপুন, ডাব্লুপি ডিবিতে সজ্জিত একটি খসড়া পোস্ট তৈরি করে যাতে তার হুকগুলি বরখাস্ত করা হয়।
গাজাজ্যাপ

আমার কাছে ফিরে আসার জন্য ধন্যবাদ। এই সম্পর্কে গতকাল সবেমাত্র সন্ধান পেয়েছি এবং ভেবেছিলাম এর ধারণাটি বিভ্রান্তিকর। মানে প্রথমে আমি একটি নতুন পোস্ট যুক্ত করার জন্য পৃষ্ঠাটি খুলি। এই পর্যায়ে আমি ভেবেছিলাম আমি ইতিমধ্যে কোনও পোস্ট তৈরি করি নি । শুধু একবার আমি প্রকাশ করুন আঘাত আমি নতুন পোস্ট তৈরি হয় মনে হবে। এটিকে আরও এগিয়ে নিয়ে যাওয়ার আমি আশা করি ডাব্লুপিপি যদি নতুন যুক্ত করে আঘাত করে তবে অটো-ড্রাফ্ট পোস্টটি মুছে ফেলবে তবে প্রকাশকে আঘাত না করেই পৃষ্ঠাটি ছেড়ে দেবে?
lowtechsun

2

Hুকবে না কেন post_updated_messages। আপনি এই বার্তাটি ডিফল্ট ওয়ার্ডপ্রেস পোস্ট আপডেট হওয়ার মতোই প্রদর্শন করতে পারেন।

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

এখানে একটি উদাহরণ দেখুন:

http://codex.wordpress.org/Function_Reference/register_post_type

অধীনে post_updated_messages

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