আমি কীভাবে কাস্টম প্লাগইন পৃষ্ঠা ক্রিয়াকে সর্বোত্তমভাবে পরিচালনা করব?


21

আমি ক্রমাগত একই বিরক্তির মধ্যে চলেছি, তাই আমি ভেবেছিলাম যে আমি এখানে কোনও ধারণা বা অভিজ্ঞতা আছে কিনা ...

আমি একটি প্লাগইন তৈরি করেছি যা এটির নিজস্ব অ্যাডমিন পৃষ্ঠা ব্যবহার করে। এটা আছে। এখন যেহেতু আমি WP_List_Table () স্টাফ বাছাই করেছি, আমি অবশ্যই বলব এটি দুর্দান্ত ... তবে ....

কাস্টম প্লাগইন পৃষ্ঠাগুলি সর্বদা লোড হয় admin.php?page=...যতক্ষণ না আমি সেগুলি সরাসরি প্লাগইন ডিরেক্টরি থেকে লোড করতে চাই, যা আমি না করি don't এখন যদি আমি সেই পৃষ্ঠা থেকে একটি 'অ্যাকশন' করি তবে আমার এটি প্রক্রিয়া করা দরকার এবং তারপরে অ্যাকশন প্যারামিটার ছাড়াই পৃষ্ঠায় ফিরে যেতে হবে । আমি জিইটি বা পোষ্ট করি না কেন, সত্যই।

এর সমস্ত অভ্যন্তরীণ পৃষ্ঠাগুলিতে ডব্লিউপি একই পৃষ্ঠায় এটি করে, এটি পরীক্ষা করে যদি কোনও পদক্ষেপ আছে কিনা, যদি এটি প্রক্রিয়া করে এবং তারপরে ক্রিয়া ছাড়াই নিজের কাছে পুনঃনির্দেশ করে। এটি সম্ভব, কারণ এই পৃষ্ঠাগুলিতে admin-headerএখনও লোড করা হয়নি।

আপনি যদি নিজের পৃষ্ঠায় এটি করার চেষ্টা করেন তবে, অর্ধেক অ্যাডমিন ইন্টারফেস ইতিমধ্যে ব্রাউজারে প্রেরণ করা হয়েছে, সুতরাং পুনর্নির্দেশ আর সম্ভব নয়। স্পষ্টতই সমাধানটি হ'ল সরাসরি অন্য পৃষ্ঠায় পোষ্ট / জিইটি করা, তার উপর ডাব্লুপি ফ্রেমওয়ার্কটি লোড করুন, প্রসেসিংটি করুন এবং তারপরে মূল পৃষ্ঠায় ফিরে যেতে ... তবে ... এটি কিছুটা বিরক্তিকর, কারণ ... আমার আসল পৃষ্ঠাটি কলব্যাকের মাধ্যমে লোড করা হয়, তাই এটি আমার ক্লাসের একটি পদ্ধতির মধ্যে চলে। ঐটা সুন্দর.

যদি আমি একটি পৃথক পৃষ্ঠা লোড করি তবে আমাকে নিজেই wp-load.phpআমার ক্লাসের বাইরে থাকতে হবে এবং বিরক্তিকর হতে হবে, এবং আমার বিশেষ ক্ষেত্রে আমাকে বিশেষভাবে বাগ লাগিয়েছে, কারণ আমি কেবল বেনামে আমার প্লাগইন ক্লাসটি ইনস্ট্যান্স করছি যাতে কেউ এটির অ্যাক্সেস করতে না পারে বাইরে থেকে.

সুতরাং এই দীর্ঘ গল্পের পরে ... পুরো অ্যাডমিন ইন্টারফেসটি ইতিমধ্যে সেটআপ না করেই কি কলব্যাকের মাধ্যমে অন্য পৃষ্ঠাটি লোড করার জন্য কোনও ভাল সমাধান এসেছিল ?

(আমি একটি কার্যবিধির সম্পর্কে জানি ... আমি load-....অ্যাকশন প্যারামিটারটি পরীক্ষা করে সেই ফাংশনটি হুক করতে পারি এবং প্রক্রিয়াজাতকরণ এবং পুনর্নির্দেশ করতে পারি But তবে আমি আরও অবাক হই ering

ধন্যবাদ।


কেন এটি দিয়ে ট্যাগ করা হয় [plugin-wp-pagenavi]? [plugin-development]এখানে অবশ্যই স্বাগত জানাই।
জান ফ্যাব্রি

@ জ্যাঁ ফ্যাব্রি: নিশ্চিত নয় যে কী plugin-wp-pagenaviজন্য ... আমি ধরে নিচ্ছিলাম এটি প্লাগইন এবং অ্যাডমিন মেনুর মধ্যে পারস্পরিক সম্পর্ক সম্পর্কিত বিষয়গুলির জন্য was যেহেতু আমার প্রশ্ন এর সাথে সম্পর্কিত তাই আমি ট্যাগটি নির্বাচন করেছি।
wyrfel

ডাব্লুপি-পেজনাভিটি ফ্রন্ট-এন্ডের জন্য আরও উন্নত পেজিং নেভিগেশন সহ একটি প্লাগইন। আপনি [admin-menu]এখানে ব্যবহার করতে পারেন , তবে আমার মনে হয় না এটি এর সাথে সত্যিই সম্পর্কিত। আমি ট্যাগগুলি যা আমার কাছে এটি ফিট করে তা পরিবর্তন করেছিলাম, আপনি অবশ্যই এটি আবার সম্পাদনা করতে পারেন।
জান ফ্যাব্রি

@ জ্যাঁ ফ্যাব্রি: পুনরায় ট্যাগিংয়ের জন্য ধন্যবাদ ... পুরো ট্যাগ পুলের সাথে তেমন পরিচিত নয়, এখনও (বেশ স্পষ্টতই)।
wyrfel

উত্তর:


28

থাম্বের নিয়ম হিসাবে, বেশিরভাগ ক্রিয়াকলাপের জন্য আপনার একটি পোষ্ট অনুরোধ ব্যবহার করা উচিত, যাতে তা দুর্ঘটনাক্রমে কার্যকর না হয় তা নিশ্চিত করে নিন । কিন্তু ব্যবহারকারী যখন পৃষ্ঠাটি রিফ্রেশ করে তখন ডুপ্লিকেট সম্পাদন রোধ করার জন্য একটি পোষ্ট অনুরোধের পরে একটি সাধারণ পৃষ্ঠায় পুনর্নির্দেশ করা ভাল অভ্যাস।

সুতরাং প্রবাহটি এরকম:

  1. আপনার পোস্টিন ফর্ম সহ আপনার প্লাগইন পৃষ্ঠা যা জমা দেয়
  2. অনুরোধ পরিচালনা করে এমন একটি পৃষ্ঠা, যা পুনর্নির্দেশ করে
  3. আপনার প্লাগইন পৃষ্ঠা, যা ক্রিয়াটির ফলাফল দেখায়

মাঝের পৃষ্ঠাটি আপনার প্লাগইন পৃষ্ঠা হতে হবে না। এর অর্থ হল আপনি ব্যবহার করতে পারেন "জেনেরিক পোষ্ট হ্যান্ডলার" যে তিন বছর আগে অন্তর্ভুক্ত করা হয়, মধ্যে হুক'admin_action_' . $_REQUEST['action']admin.php

উদাহরণস্বরূপ ব্যবহারকারী হলেন আকিসমেট প্লাগইন । আপনি যদি এটি নির্ভরযোগ্যভাবে ব্যবহার করতে চান তবে আপনাকে সরাসরি জমা দিতেadmin.php হবে, অন্তর্ভুক্ত হওয়ার মতো অন্য পৃষ্ঠায় নয় admin.php

এটি কীভাবে ব্যবহার করা যায় তার একটি খুব প্রাথমিক উদাহরণ:

add_action( 'admin_action_wpse10500', 'wpse10500_admin_action' );
function wpse10500_admin_action()
{
    // Do your stuff here

    wp_redirect( $_SERVER['HTTP_REFERER'] );
    exit();
}

add_action( 'admin_menu', 'wpse10500_admin_menu' );
function wpse10500_admin_menu()
{
    add_management_page( 'WPSE 10500 Test page', 'WPSE 10500 Test page', 'administrator', 'wpse10500', 'wpse10500_do_page' );
}

function wpse10500_do_page()
{
?>
<form method="POST" action="<?php echo admin_url( 'admin.php' ); ?>">
    <input type="hidden" name="action" value="wpse10500" />
    <input type="submit" value="Do it!" />
</form>
<?php
}

হেই, আমি কোডটি আবার দেখব, আমি অবশ্যই তা দেখতে পাইনি, তবে কেবল নিশ্চিত করার জন্য ... তাই আপনি যা বলছেন তা যদি আমি কোনও পৃষ্ঠা পরামিতি ছাড়াই অ্যাডমিন.এফপি কল করি তবে এটি সমস্ত পৃষ্ঠা এড়িয়ে যায় লোডিং এবং কেবল কিছু সূচনা করে এবং হুক চালায়? এটি দুর্দান্ত হবে ... ইশ (তারা এখনও পৃষ্ঠা লোডিংয়ের আগে হুক রাখেনি কেন আমি এখনও পাই না)।
wyrfel

@ ভাইরফেল: হ্যাঁ, আকিসমেট admin.phpউত্স আমাকে শিখিয়েছিল সেই "কৌশল" সরাসরি কল করা। আপনি যখন কোনও ফর্ম প্রদর্শন করছেন এবং ঠিকঠাক ত্রুটির ক্ষেত্রে তা আবার প্রদর্শন করতে চান আপনি ঠিক বলেছেন: গন্তব্যটি যদি আপনার প্লাগইন পৃষ্ঠা হয় তবে শুরুতে কোথাও হুক হয় (তাই আপনি সফল হলে পুনর্নির্দেশ করতে পারেন, বা প্রদর্শনটি প্রদর্শন করতে পারেন) আবার না থাকলে ত্রুটি বার্তাগুলি দিয়ে ফর্ম করুন)। এটি কোনও ট্র্যাকের টিকিটে প্রস্তাব করবেন?
জান ফ্যাব্রি

আমি টিকিট দায়ের করব। 'load-<pagehook>'কার্যকারণ হিসাবে, আমি কাজ করতে হুককে পেয়েছি ... পৃষ্ঠাটি লোড হওয়ার আগেই এটি বলা হয়েছিল ... তবে admin_action_...ধারণাটি পুরোপুরি সুন্দর এবং আরও নির্দিষ্ট বলে মনে হচ্ছে। এছাড়াও, একটি নোটে, ত্রুটি বার্তাগুলি এখনও সমস্যাযুক্ত যদি আপনি পোষ্টগুলি করেন এবং পুনরায় লোডের উপরে পুনরায় পোস্ট করতে চান না, তবে এটি একটি ভিন্ন বিষয়।
wyrfel

@ ভাইরফেল: ত্রুটি বার্তাগুলি কেন এখনও সমস্যাযুক্ত হবে? যদি কোনও ত্রুটির বার্তা থাকে তবে পৃষ্ঠায় থাকুন এবং বার্তাগুলি দিয়ে আবার ফর্মটি প্রদর্শন করুন (অবশ্যই একটি রিফ্রেশ এখানে খুব বেশি অর্থ দেয় না - তবে এটি কোনও ক্ষতিও করবে না, কারণ ত্রুটিগুলি এখনও থাকবে এবং কোনও পদক্ষেপ হবে না) সংযত হন). যদি কোনও ত্রুটি না থাকে তবে ক্রিয়াটি সম্পাদন করুন এবং একটি "নিরাপদ" ওভারভিউ পৃষ্ঠাতে পুনর্নির্দেশ করুন। এটি কাজ করবে - যদি admin_action_প্লাগইন পৃষ্ঠা লোডারটির আগে হুক সরানো হত।
জান ফ্যাব্রি

ঠিক আছে ... আমি খুব জটিল ভাবছিলাম।
ওয়াইরফেল

3

আমি ব্যবহারকারীকে যে পৃষ্ঠাটিতে পদক্ষেপ গ্রহণ করা হয় সেখানে যে পৃষ্ঠায় ক্রিয়া ইউআরএল রয়েছে কেবল সেখানে নোহেডার = সত্য যোগ করে আমি এটি কিছুটা ভিন্নভাবে পৌঁছেছি

আমার হ্যান্ডলারটি তারপরে ক্রিয়াটি সম্পাদন করে (অর্থাত্‍ সাধারণত একটি অ্যাড, আপডেট বা মুছুন) এরপরে একটি পৃষ্ঠার wp_redirect () সাথে পরবর্তী পৃষ্ঠার ক্রিয়াটি (যেমন পৃষ্ঠা যুক্ত করুন -> পৃষ্ঠা সম্পাদনা করুন, পৃষ্ঠা মুছুন -> তালিকা পৃষ্ঠাটি সম্পাদনা করুন -> সম্পাদনা পৃষ্ঠা) )। আমি ইউআরএলতে একটি বার্তাও পাস করি যাতে আমি আপডেট হিসাবে সাফল্যের সাথে ব্যর্থ হতে পারি displayed

এই পদ্ধতিটি সমস্ত ক্রিয়াকে রাখে: একই শ্রেণিতে এবং একই অ্যাডমিন স্লাগের সাথে তালিকা তৈরি, সংযোজন, সম্পাদনা, মুছুন, বাল্ক-মুছা ইত্যাদি, যাতে এটি বজায় রাখা এবং বোঝা বেশ সহজ।


মানুষ, আপনি প্রতিভা! আমি সোজা দু'দিন ধরে লড়াই করে যাচ্ছি এবং এটি "নোহেডার = ট্রু" অংশের মতো আমার প্রয়োজন ছিল। ধন্যবাদ!
r00m

0

অন্য একটি ভিন্ন পদ্ধতির ফর্মটিতে কেবল একটি লুকানো ইনপুট ক্ষেত্র যুক্ত করা হচ্ছে:

<input type="hidden" name="page" value="your-page-slug" />

এইভাবে, ওয়ার্ডপ্রেস স্বয়ংক্রিয়ভাবে পুনঃনির্দেশকে পরিচালনা করবে বলে মনে হচ্ছে।

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