সেই প্লাগইন থেকে কোনও পৃথক ফাংশন কল করার সময় পিএইচপি শর্তসাপূর্ণ বিবৃতি ব্যবহার না করে কীভাবে ডাব্লুপিপি থিমে প্লাগইন তৈরি করবেন?


10

আমার ওয়ার্ডপ্রেস থিমগুলির একটিতে সঠিকভাবে চালানোর জন্য কয়েকটি তৃতীয় পক্ষের প্লাগইন প্রয়োজন।

বেশিরভাগ সময় শর্তযুক্ত বিবৃতি ব্যবহার করে তৃতীয় পক্ষের প্লাগইনগুলি থেকে ফাংশনগুলি কল করতাম

    if(function_exist('plugin_function')) {
             plugin_function() // do something
    }

মনে করুন যদিও আমার থিমের অনেকগুলি ফাইলের মাধ্যমে আমার একটি প্লাগইন ব্যাপকভাবে ব্যবহার করা দরকার ... আমি যদি অনেকগুলি শর্তাবলী ব্যবহার করা এড়াতে চাই ... ডাব্লুপি-তে কিছু নির্দিষ্ট প্লাগইন ইনস্টল করার জন্য আরও সঠিক উপায় আছে বা সেগুলি আরও ভাল ইনস্টল করতে হবে? থিমটি সক্রিয় করার আগে যদি তারা নিখোঁজ হয়?

ধন্যবাদ

উত্তর:


7

is_plugin_active()বরং ভঙ্গুর: প্লাগইন লেখক হয় মূল ফাইলটির নতুন নামকরণ বা ব্যবহারকারী যখন প্লাগইনটির ডিরেক্টরি বা প্রধান ফাইলটির নাম পরিবর্তন করে তা ভেঙে যায়। কোনও নির্দিষ্ট পাবলিক ফাংশন বিদ্যমান কিনা তা যাচাই করা আরও ভাল।

প্রতিবার আপনার কিছু প্লাগইন কার্যকারিতা প্রয়োজন হয় তা পরীক্ষা করে এড়াতে আপনি প্রশাসক অঞ্চলে একটি বার্তা প্রদর্শন করতে পারেন:

add_action( 'admin_notices', 'my_theme_dependencies' );

function my_theme_dependencies() {
  if( ! function_exists('plugin_function') )
    echo '<div class="error"><p>' . __( 'Warning: The theme needs Plugin X to function', 'my-theme' ) . '</p></div>';
}

অন্য বিকল্প হ'ল http://tgmpluginactivation.com/ এর মতো কিছু ব্যবহার করা


প্লাগইন লেখক যদি আপনার সাথে প্রশ্নযুক্ত কোনও ফাংশনের নাম পরিবর্তন করে function_exists, তবে একজন সাধারণ ব্যবহারকারী কেবল মেসেজটি পাবেন, যে কোনও প্লাগইন নির্ভর করে যে প্লাগইন তিনি ইনস্টল করেননি। সমস্যা ব্যবহারকারীকে আসলে হয় হবে প্লাগইন ইনস্টল করা আছে এবং তারপর মাত্র কেন এটা আশ্চর্য কাজ doens't । ওহ, এবং আমি আপনাকে এর জন্য হ্রাস করব না
কায়সার

আপনি যদি ভোটের প্রতি যত্নশীল হন তবে আপনার কিউ নিজেই উত্সাহ দেওয়া উচিত, কারণ এটি একটি ভাল।
কায়সার

প্লাগইন লেখক যদি ফাংশনটির নাম পরিবর্তন করেন তবে তিনি ফাইলের নাম পরিবর্তন করবেন কিনা তার চেয়ে অনেক বেশি ব্যবহারকারীদের কাছ থেকে অভিযোগ পাবেন complaints
scribu

এবং আমি আপনার উত্তরটিকে অগ্রাহ্য করেছিলাম কারণ এটি প্রশ্নের উত্তর দেয় না, আইএমও। বা আপনি কি গোপনে নীচে নামা পছন্দ করবেন, কোনও ব্যাখ্যা দেওয়া হয়নি?
scribu

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

1

প্লাগইনটি অক্ষম থাকাকালীন এটি থিমটি ভাঙ্গা রোধ করতে পারে না, তবে "প্রয়োজনীয় থিমগুলির জন্য প্রশাসনের বিজ্ঞপ্তিটি কীভাবে প্রদর্শন করবেন" প্লাগইন সম্পর্কে এই চটজলদি নিবন্ধটি দেখব । কোনও প্লাগইন ইনস্টল করতে বাধ্য করে এমন কোনও থিমের ধারণার সাথে আমি কখনই স্বাচ্ছন্দ্যবোধ করি না এবং তাই এটি পরবর্তী সেরা বিকল্পের মতো বলে মনে হয়।

আরেকটি দ্রুত চিন্তা: আমি এটি কখনও চেষ্টা করি নি, তবে আমি আশ্চর্য হয়েছি যে আপনি যদি একক শর্তাধীন একাধিক হুক রাখার কোনও চতুর উপায় বের করতে পারেন। হতে পারে আপনি সমস্ত শর্তসাপেক্ষিক কার্যগুলি আলাদা কোনও ফাইলে আলাদা করতে পারতেন এবং কেবলমাত্র যদি if( function_exists( 'plugin_function' ) )ফেরত আসে তবে এটির প্রয়োজন হয় true(এই বোঝার সাথে যে এটি একটি অসম্পূর্ণ পরীক্ষা।


0

আপনার যদি এটির জন্য কেবল একটি প্লাগইন পৃষ্ঠা প্রয়োজন হয় তবে সেখানে রয়েছে is_plugin_active()। আপনার যদি এটির বাইরে প্রয়োজন হয় তবে আপনি মূল থিমটিতে মূল ফাংশনটি অনুলিপি / আটকান এবং তারপরে এটি পুনরায় ব্যবহার করুন:

if ( ! is_admin() )
{
/**
 * Check whether the plugin is active by checking the active_plugins list.
 *
 * @since 2.5.0
 *
 * @param string $plugin Base plugin path from plugins directory.
 * @return bool True, if in the active plugins list. False, not in the list.
 */
function is_plugin_active( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) || is_plugin_active_for_network( $plugin );
}
}

শর্তসাপেক্ষে কার্যটি ডাবল সংজ্ঞায়িত করার সাথে কোনও ত্রুটি এড়ানো হয়।


এটি আসলে প্রশ্নের উত্তর দেয় না। এটি কেবলমাত্র পরিবর্তিত if(function_exist('plugin_function'))হয়if(is_plugin_active('plugin-file.php'))
স্ক্রিবু

0

দ্রষ্টব্য: @scribu এবং @kaiser এর মধ্যে আলোচনা আরও সহজ করার জন্য এই উত্তরটি এখানে। মোডস: দয়া করে মুছবেন না। ব্যবহারকারী / পাঠক: দয়া করে ভোট দিন না। আপনি যদি আলোচনাটি অনুসরণ করতে চান তবে পুনর্বিবেচনা / সম্পাদনা লগটি একবার দেখুন। আপনি যদি আলোচনায় যোগ দিতে চান তবে উত্তরটি সম্পাদনা করুন। আলোচনার যদি কোনও ফলাফল হয়, তবে এটি হিসাবে চিহ্নিত হবে। ধন্যবাদ.


প্রেক্ষাপটে

ওজন আলাদা যেগুলি বিভিন্ন পরিস্থিতিতে আছে, যেখানে আপনি একটি প্লাগইন নির্ভরতা থাকতে পারে। (উদাহরণগুলি কেবল কাল্পনিক)। "(মূল) প্লাগইন" শব্দটি পিতামাতার দৃষ্টিকোণ থেকে "থিম" দিয়ে বিনিময় করা যায়।

  1. (শক্ত) একটি শিশু প্লাগইন যা কেবলমাত্র কার্যকারিতা প্রসারিত করে বা বিদ্যমান প্লাগইনের প্রদর্শন (এবং অনুরূপ) পরিবর্তিত করে এবং তাই পিতামাতাকে ছাড়া বিদ্যমান থাকতে পারে না। উদাহরণ: বাডিপ্রেস »বাডিপ্রেস-ফানকি কমেন্টসডিপ্লে
  2. (স্বাভাবিক) একটি প্লাগইন যা শিশু প্লাগইন সক্রিয় হওয়ার সময় কার্যকারিতা বাড়িয়ে তোলে। উদাহরণ: jQueryAttachmentCarousel »jQuerySlideDeck
  3. (নরম) একটি প্লাগইন যা কেবল একটি বৈশিষ্ট্য যুক্ত করে। উদাহরণ: ডিজনি ওয়ান্ডারল্যান্ড থেম »মিকিজসোসিয়াল লিংক

নীচে আমি "অন্যান্য" প্লাগইন আপডেট করি এবং চেকটি আর কাজ করে না তখন কী হয় তা স্কেচ করার চেষ্টা করি।

  • বিজ্ঞাপন 1) বুডিপ্রেস অ্যাক্টিভেট করা ছাড়া প্লাগইনটির অস্তিত্ব থাকতে পারে না »স্টাফ সম্পূর্ণরূপে ভেঙে যায়।
  • বিজ্ঞাপন 2) প্লাগইনটি কারাউসেল থেকে স্লাইডডেকে স্যুইচ করার বিকল্পটি দিতে পারে নি »তারযুক্ত প্রদর্শনগুলি প্রদর্শন করে (আমি ধরে নিই যে শৈলীগুলি স্লাইডডেকে পরিবর্তিত হয়েছে)।
  • বিজ্ঞাপন 3) মিকিস্কোসিয়াল লিঙ্কগুলি অদৃশ্য হয়ে যায়।

চেক

এর বিরুদ্ধে চেক করার জন্য তিনটি সম্ভাবনা রয়েছে, আপনি যদি কোনও প্লাগইন সক্রিয় কিনা তা জানতে চান:

  • উ: ফোল্ডারটি কি বিদ্যমান?
  • খ। মূল ফাইল - বিকল্প 'active_plugins'- উপস্থিত আছে?
  • সি একটি নির্দিষ্ট ফাংশন বিদ্যমান?

আমি যদি এখন আমার অভ্যন্তরীণ লিঙ্ক পরীক্ষক প্লাগইনটিকে উদাহরণ হিসাবে গ্রহণ করি , এটি কোনও পাবলিক এপিআই সরবরাহ করে না এবং এটি বাড়ানো নয়, তবে আমি দাবিতে বা কেবল ইচ্ছামতো অভ্যন্তরীণ ফাংশন নাম পরিবর্তন না করার কোনও কারণ (লেখক হিসাবে) দেখতে পাচ্ছি না । সুতরাং যদি কেউ এই প্লাগইনে পিগব্যাক করার চেষ্টা করে, তবে স্টাফগুলি আপডেটে কেবল (কার্যকারিতা এবং বান্ডিলিংয়ের দৃ tight়তার উপর নির্ভর করে) ব্রেক হবে। ফাইলের নামের ক্ষেত্রেও একই কথা। ফাইল নেমটি পরিবর্তন না করার জন্য আমার কোনও আসল কারণ নেই (প্লাগইন আপডেটে নিষ্ক্রিয় হয়ে যাবে)। ফোল্ডারের নাম পরিবর্তন করতে আমাকে কেবল আটকাবে কেবল তা হল আপডেট চেক ও বিজ্ঞপ্তিটি ফাইলের নামের বিরুদ্ধে চলে - যদি এটি সরকারী রেপোতে হোস্ট করা থাকে।

সুতরাং আমি (পিতামাতার) প্লাগইনটির সবচেয়ে শক্তিশালী (পরিবর্তনের পক্ষে সহজ) পরিবর্তনের বিরুদ্ধে অনেক কথা বলব):

ফাংশন »প্রধান ফাইলের নাম» ফোল্ডার


যখন আমি বলেছিলাম যে কোনও ফাংশন চেক ব্যবহার করার চেয়ে কম ভঙ্গুর, is_plugin_active()আমি ধরে নিয়েছিলাম যে প্রশ্নে থাকা ফাংশনটি প্লাগইন লেখক স্পষ্টভাবে উত্সাহিত করে। এর চূড়ান্ত উদাহরণ wp_pagenavi()হ'ল ডাব্লুপি-পেজনাভি প্লাগইন দ্বারা প্রদত্ত টেম্পলেট ট্যাগ।

নির্ভরতা নির্ধারণে অসুবিধা হ'ল ফাইলের নাম জড়িত না এমন প্লাগইনগুলি অনন্যভাবে সনাক্ত করার কোনও মানক উপায় নেই।

বিষয় সম্পর্কে আরও চিন্তাভাবনা:

http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme


আমার ধারণা আমরা এখনও পর্যন্ত তিনটি পয়েন্টে এটি যোগ করতে পারি:

  • আমরা কিছুটা ভিন্ন বিষয়ে কথা বলেছি
  • আমরা সম্মত হই যে বিষয়টি কী হবে বলে আমার মনে হয়েছিল বুলেটপ্রুফের কোনও উপায় নেই around
  • আপনার প্রশ্নের উপলব্ধি থেকে আপনি বৈধ পথে যাবার প্রস্তাব দিয়েছেন

(এতদূর) স্মার্টতম উপায়টি আমি ভাবতে পারি যে আমি ইতিমধ্যে কয়েকটি (খুব কম) প্লাগিনে দেখেছি:

// inside the plugin file:
add_action( 'plugin_custom_hook', 'plugin_trigger' );
// inside some template:
do_action( 'plugin_custom_hook' );

এ সম্পর্কে খুব বেশি চিন্তা না করেই, তবে আমি অনুমান করি আপনি 'অল' ফিল্টারের একটি চেকের জন্য আপনার নোটিশটি আটকে দিতে পারেন এবং বর্তমান ফিল্টারটির ভিতরে যদি আপনি shutdownহুকের উপরে উপস্থিত হন তখন এটি পরীক্ষা করতে পারে ...?


হুক ব্যবহার করা 'স্বাভাবিক' এবং 'দুর্বল' নির্ভরতার জন্য ভাল কাজ করবে। একমাত্র ত্রুটিটি হ'ল আপনাকে এখনও ব্যবহার করতে হবে function_exists()বা is_plugin_active()যদি নির্ভরতা না মেটানো হয় তবে আপনি থামতে চান। এর জন্য 'সমস্ত' ফিল্টার ব্যবহার করা খুব ব্যয়বহুল আইএমও হবে।

@scibu এটি "আপনার" বিষয়টিকে লক্ষ্যযুক্ত করা হয়েছিল। (আমি ইতিমধ্যে আমার সম্পর্কে কথা বাদ দিয়েছি)। :)

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

এখানে একটি শক্ত অংশ (বা আরও বেশি প্রশ্ন): "আপনাকে» ডিজনিওয়ান্ডারলিঙ্কস to "ইনস্টল করতে হবে" নির্ভরতা সম্পর্কে ব্যবহারকারীকে অবহিত করতে প্রশাসক বিজ্ঞপ্তি লিখতে, আপনি এটি পরীক্ষা করতে পারেন array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )। আমি নিশ্চিত না এটি কাজ করে কিনা, তবে আফিক অ্যারে উভয় পক্ষেই (জনসাধারণ / প্রশাসক) অ্যাক্সেসযোগ্য হওয়া উচিত।


যে কাজ করবে না। কলব্যাক হুকটিতে নিবন্ধিত হওয়ার কারণে এর অর্থ এই নয় যে প্রত্যাশিত হলে হুকটি ট্রিগার হবে। একমাত্র জিনিস যা ধরণের ধরণের কাজ করবে তা হল 'শাটডাউন' হুক ব্যবহার করা, যা আপনি আগে উল্লেখ করেছেন:

add_action( 'shutdown', function() {
  if ( !did_action( 'template_tag_like_hook' ) )
    echo 'Problem.';
} );

অবশ্যই, এটি একেবারে নীচে, </html>ট্যাগের পরে , সামনের প্রান্তে (যেহেতু টেমপ্লেট ট্যাগগুলি সাধারণত ব্যবহৃত হয়) মুদ্রিত হবে , যা খুব বেশি ব্যবহার হয় না।

আপনি বার্তাটি wp_options এ সঞ্চয় করার চেষ্টা করতে পারেন এবং তারপরে এটি প্রশাসক অঞ্চলে প্রদর্শন করতে পারেন তবে এটি কীটগুলির সম্পূর্ণ নতুন ক্যানটি খুলতে পারে: অবৈধকরণ, ক্যাচিং প্লাগইন ইত্যাদি etc.


রেকর্ডের জন্য, এটি সাইটের কার্যকারিতাটি ব্যবহার করার একটি বরং অপ্রচলিত উপায়। এটি আমাকে c2.com/cgi/wiki- এর
স্ক্রিবু

হ্যাঁ, তাই তবে কীভাবে আমরা পরবর্তী পাঠকদের কাছ থেকে এটিকে গোপন না করে আলোচনা চালিয়ে যেতে পারি তা আমার ধারণা ছিল না।
কায়সার

আমি বুঝতে পারি না যে প্রশ্ন পোস্ট করা বেশ আলোচনার জন্ম দিয়েছে :) তবে এটি সত্যই আকর্ষণীয় এবং আপনার প্রচেষ্টা এবং সময়কে পরামর্শ দেওয়ার জন্য এবং কিছু চিন্তাশীল বিতর্ক দেওয়ার জন্য আমি উভয়কে ধন্যবাদ জানাই। আমি মনে করি টিজিএম অ্যাক্টিভেশন ক্লাসটি ব্যবহার করার জন্য স্ক্রিবু (যেগুলির মধ্যে একটির মধ্যে একটি) পরামর্শটি আমার উত্তরটির সমাধান কমপক্ষে কেবল ব্যবহারিক দৃষ্টিকোণ থেকে দিতে পারে, আমি এটি খতিয়ে দেখব। যাইহোক, আমি এখনও পুরো আলোচনায় নজর রাখছি কারণ প্রস্তাবিত অন্যান্য পদ্ধতিগুলিও কিছু পরিস্থিতিতে কিছু পরিস্থিতিতে বোঝায় এবং এটি পড়তে আমার পক্ষে খুব আকর্ষণীয়, ধন্যবাদ!
unfulvio
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.