কিভাবে আপডেট_পোস্ট_মেটা হুক করবেন এবং পোস্ট_মেটা মুছবেন?


29

আমি এখনও পুরো বিষয়টিকে ঘিরে আমার মাথাটি পেতে লড়াই করছি, তাই আমি নিম্নলিখিত কাজটি করার চেষ্টা করতে গিয়ে সত্যই আটকে গেছি:

যদি update_post_metaবরখাস্ত হয় তবে এটি কোনও কিছুর meta_keyসমান কিনা তা পরীক্ষা করে দেখুন (নির্দিষ্ট মেটা_কি ব্যবহার করা হলে আমি কিছু কোড ট্রিগার করতে চাই)। যদি আমি যে মেটা কীটি সন্ধান করছি তা হলে এমন কিছু কোড চালান যা $post->IDমেটা কী আপডেট হওয়ার বিষয়টি জানতে হবে ।

delete_post_metaউপরের মতো বিপরীত ধরণের কাজটিও আমার খুব দরকার ।

কেউ কি আমাকে হুকিংয়ের জন্য কিছু উদাহরণ কোড সরবরাহ করতে পারে update_post_metaএবং delete_post_meta?

উত্তর:


45

update_post_metaআঙ্গুলসমূহ আরো জেনেরিক থেকে বলা হয় update_metadata(), ফাংশন তাই আপনি এটি সরাসরি পাওয়া থাকতে পারে। তিনটি হুকটি হ'ল:

  • update_post_metadata, একটি ফিল্টার যা আপনাকে মেটাডেটা আপডেট "হাইজ্যাক" করতে এবং অন্য কিছু করতে দেয়। যদি আপনি এমন কোনও ফাংশন সরিয়ে রাখেন যা বুলেয়ানকে ফেরত দেয়, মৃত্যুদন্ড কার্যকর হয় এবং সেখানে বুলেটিয়ান ফিরে আসে।
  • update_post_meta, ডাটাবেসে ডেটা আপডেট হওয়ার আগে একটি ক্রিয়া ডাকা হবে ।
  • updated_post_meta, ডাটাবেসে ডেটা আপডেট হওয়ার পরে কল হয়ে যায় এমন একটি ক্রিয়া ।

মেটা কী ডাটাবেসের মধ্যে এখনও বিদ্যমান না করে থাকেন, update_metadata()নিয়ন্ত্রণ পাসের add_metadata(), যা অনুরূপ আঙ্গুলসমূহ হয়েছে add_post_metadata, add_post_metaএবং added_post_metaupdate[d]_post_metaডাকা হওয়ার আগেই এটি ঘটে । তাই আপনি যদি কিছু করতে যখন মেটা কী যোগ করা হয় চান বা আপডেট, নিশ্চিত করুন উভয় মধ্যে হুক হতে update*এবং add*আঙ্গুলসমূহ - কিন্তু নোটিশ যখন updated_*এবং added_*কর্ম অনুরূপ পরামিতি পাস, update_*এবং add_*না ( add_post_metaএকটি মেটা আইডি প্রথম পাস না) ।

delete_metadata()অনুরূপ আঙ্গুলসমূহ আছে: delete_post_metadata, delete_post_metaএবং deleted_post_meta

কোডের উদাহরণ:

add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_do_something( $post_id, $meta_value );
    }
}

add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_undo_something( $post_id );
    }
}

এই জন্য সুপার THX। আমি update_post_metaব্যবহার সম্পর্কে সচেতন ছিলাম update_metadataএবং সেখানে, সেখানে হুক ছিল added_post_metaএবং updated_post_metaযতদূর আমি পেতাম। আমি কীভাবে ব্যবহার করব বুঝতে পারিনি। তবে এখন আমি মনে করি এটি পেয়েছি :)
ব্র্যাডি

3
আরও সুনির্দিষ্টভাবে, updated_{$post_type}_meta
হুকটি

8

জান উত্তরটি উপরে সম্পাদিত পোস্ট পৃষ্ঠা থেকে একটি কাস্টম মেটাডেটা মোছার ক্ষেত্রে বাদে উপরে বেশ কিছুটা কভার করে। আপনি মেটাডেটার অধীনে "মুছুন" বোতামটি ক্লিক করার সাথে সাথে ডাব্লুপি-অ্যাডমিন / অ্যাডমিন-অ্যাজ্যাক্স.এফপি-র কল হিসাবে এটি অযৌক্তিকভাবে ঘটে। দুর্ভাগ্যক্রমে, এটি delete_metadata()মেটা.এফপি ফাংশনটিকে বাইপাস করে এবং ডাব্লুপি delete_meta()-অ্যাডমিন / এতে / পোস্ট.এফপি কল করে (ডাব্লুপি -অন্তর্ভুক্ত / পোস্ট.এফপি নিয়ে বিভ্রান্ত হওয়ার দরকার নেই)।

এমন দুটি ক্রিয়া রয়েছে যা এখনও delete_postmeta(মুছে ফেলার আগে) এবং deleted_postmeta(মোছার পরে) ব্যবহার করা যেতে পারে। উভয় একটি একক পরামিতি গ্রহণ $mid, যা মেটাডেটা (আইডি হল না কী)। আপনি মেটাডেটা অবজেক্টটি ব্যবহার করে পুনরুদ্ধার করতে পারেন:

$meta = get_post_meta_by_id($mid);  

যা মেটা_আইডি, পোস্ট_আইডি, মেটা_কি আবদ মেটা_ভ্যালু দিয়ে কোনও বস্তু প্রদান করে। অবশ্যই, deleted_postmetaততক্ষণে বলা হয় মেটাডেটা মুছে ফেলা হয়েছে তাই get_post_meta_by_id()কাজ করবে না (কোন ধরণের ক্রিয়াটি অকেজো করে তোলে)

একই পোস্ট সম্পাদনা পৃষ্ঠা থেকে একটি কাস্টম মেটাডেটা আপডেট করার জন্য যায়। update_metadata()ফাংশন (এবং তার ক্রিয়া) meta.php হল না বলা হয়, কিন্তু update_meta()WP-অ্যাডমিন ফাংশন / অন্তর্ভুক্ত / post.php পরিবর্তে হয়। এখানে আবার দুটি ক্রিয়া, update_postmetaএবং updated_postmeta। আরগগুলি হ'ল $ মেটা_আইডি, $ পোস্ট_আইডি, $ মেটা_কি, $ মেটা_ভ্যালু।

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