পোস্ট ডেটা সংরক্ষণ করার আগে আমি কীভাবে সম্পাদনা করতে পারি?


19

আমার একটি প্লাগইন রয়েছে এবং আমি ডেটাবেসে সংরক্ষণ করার আগে পোস্টের সামগ্রী কিছু ফিল্টারের মাধ্যমে চালাতে সক্ষম হতে চাই। দিকে তাকিয়ে থেকে প্লাগইন API , আমি দেখতে যে দুই আঙ্গুলসমূহ যে বর্ণন তারা সহায়ক হতে পারে:

save_post
wp_insert_post

একমাত্র সমস্যাটি মনে হচ্ছে save_postএটির মতো একটি ভেরিয়েবল ফিরিয়ে দেওয়ার দরকার নেই, এবং সুতরাং কীভাবে সামগ্রীটি ফিল্টার করতে হয় তা আমি জানি না এবং wp_insert_postনথিভুক্ত দেখায়।

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

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

আমি একটি টাইমস্ট্যাম্প সংযোজন করার চেয়ে আরও কার্যকর কিছু করতে যাচ্ছি, যথা: কিছু রিজেক্স ফিল্টার চালানো, তবে এটি সাধারণ ধরণের ফিল্টার / ক্রিয়া যা আমি যুক্ত করার চেষ্টা করছি।

হালনাগাদ

দয়া করে নোট করুন যে আমি ডাটাবেসে সংরক্ষণ করার উপায় সম্পর্কে ডেটাটি বাধিত করতে চাই - যখন এটি পোস্টে প্রদর্শিত হচ্ছে না (যেমন: কোনও ফিল্টার যোগ করে নয় the_content)


দ্রষ্টব্য: আপনার একটি খারাপ নকশা রয়েছে :-) 1. প্রতিবারের পোস্ট সংরক্ষণ করা হবে, এই স্ট্রিং যুক্ত হবে। (আপনি যদি আগেরটি মুছে না ফেলেন তবে আপনি প্রচুর পরিমাণে This post was...২ য় তথ্য পাবেন this এই জাতীয় একটি পোস্টের মেটা মান হিসাবে সংরক্ষণ করা উচিত :-) বিটিডাব্লু: তথ্য সংরক্ষণের পরেsave_post বলা হয়, তাই এটির পরে ডাটাবেসে সংরক্ষণ করা হয়েছিল (আপনি যা চান তা নয়)।
jave.web

উত্তর:


29

Wp_insert_post_data ফিল্টার তা করতে পারে:

add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );

function filter_post_data( $data , $postarr ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}

2
ধন্যবাদ আমাকে সঠিক দিকে যেতে আমার মনে add_actionহয় এর পরিবর্তে আপনাকে আসলে ব্যবহার করা দরকার add_filter। এছাড়াও আপনার wpse35931_filter_post_dataএবং filter_handlerঅসম্পূর্ণ ...
সিডব্লিউড

1
এটি অবশ্যই একটি ফিল্টার। যদিও ফিল্টার এবং ক্রিয়া একই কার্যকারিতার উপর ভিত্তি করে যা কিছু ক্রসওভারকে অনুমতি দেয়। আপনি যদি এটি কোনও ক্রিয়া হিসাবে ব্যবহার করেন তবে আপনি সেই ডেটাটি ফিরিয়ে দিতে সক্ষম হবেন না যা পুরো পয়েন্টটি সরিয়ে ফেলবে। আপনি ডেটা ফিল্টার করতে চান এবং তারপরে এটি ফিরিয়ে দিতে চান।
জেক

2
wp_insert_post_dataকাজ করে, তবে ওপি (এবং সম্ভবত অন্যরা) কী অর্জন করতে চায় তার জন্য এটি কিছুটা অতিরিক্ত শক্তিশালী। এই পরিস্থিতিতে একটি সহজ বিকল্পটি content_save_pre@ ড্রজাউস দ্বারা প্রস্তাবিত।
রিনোগো

1
wp_insert_post_dataফিল্টারটির জন্য বিকাশকারী দস্তাবেজগুলি : developer.wordpress.org/references/hooks/wp_insert_post_data
jave.web

আপনি যখনই ডাবল ডাব্লুপি_সিন্ট_পোস্ট () ইন ম্যানুয়ালি কল করুন, উদাহরণস্বরূপ, কোনও পোস্ট সন্নিবেশ / আপডেট করার জন্য আপনার থিমের ফাংশন.এফপি কল করুন যখনই কোনও পোস্ট কোনও সম্ভাব্য উপায় দ্বারা সংরক্ষণ করা হয় (যেমন ব্যাকএন্ডের মাধ্যমে, সীমান্তের মাধ্যমে) , অন্যভাবে ...)?
ভাদিম এইচ


2

আপনি হুক পরীক্ষা করতে পারেন pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

1

সংরক্ষণের আগে এর <shell>সাথে প্রতিস্থাপন করতে সক্রিয় থিমটিতে নিম্নলিখিত কোডটি যুক্ত করুন [shell]:

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<shell>', '[shell]', $value);
 }

0

আপনি যদি কেবলমাত্র সমস্ত পোস্টের শেষে একই জাতীয় কিছু যুক্ত করতে চান তবে আমি আপনাকে the_contentফিল্টারটি ব্যবহার করার পরামর্শ দিচ্ছি ।

function append_to_content( $content ) {
    global $post;
    return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );

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