কেন_ডমিন ড্যাশবোর্ড শর্টকোড নিবন্ধন করবেন না?


10

আমি লক্ষ করেছি যে কিছু প্লাগইন যেমন পরিচিতি-ফর্ম -7 , নেক্সটজেন-গ্যালারী , সম্ভবত অন্যরা, যখন is_admin()সত্য হয় তখন তাদের শর্টকোডগুলি নিবন্ধভুক্ত না করার একটি আকর্ষণীয় অ্যান্টি-বৈশিষ্ট্য রয়েছে ।

সমস্যাযুক্ত বিষয়টি হ'ল, আপনি যদি এজ্যাক্স থেকে কিছু গতিশীল সামগ্রী তৈরি করতে চান (যার শর্টকোড থাকতে পারে) এবং এটি করার সঠিক "ডাব্লুপি" পদ্ধতি অ্যাডমিন-অজ্যাক্স.এফপি ব্যবহার করতে চান, তবে ডাব্লুপি_এডমিন সত্য হওয়া সম্ভব নয়। অ্যাডমিন- ajax.php প্রথম লাইন দেখুন:

define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
    define( 'WP_ADMIN', true );
}

এখন, এটা সেখানে পিএইচপি এক্সটেনশনের তোমাকে যেতে দিবো একটি নির্ধারিত ধ্রুবক (হল hacky) আন-নির্ধারণ করা হয় বলে মনে হয়, অথবা একটি উপায় অনথিভুক্ত WP_Screen সিস্টেমের সাথে জগাখিচুড়ি হতে পারে এবং $GLOBALS['current_screen']করা is_admin()ফাংশন প্রত্যাবর্তন মিথ্যা ?? সর্বাধিক ব্যবহারযোগ্য ব্যবহারের কাজটি পৃষ্ঠা বা সাইটের মূলকে পোস্ট করা বলে মনে হচ্ছে।

is_admin()মিথ্যা হলে প্লাগইনগুলির শর্টকোডগুলি নিবন্ধকরণ করা কি সাধারণ ? যদি তা হয় তবে এটির অকালিক অনুকূলতা ছাড়াও আমি এর জন্য অন্য কোনও ডকুমেন্টেশন বা কারণ খুঁজে পাইনি।

উত্তর:


6

আমি কিছুক্ষণ আগে যোগাযোগ-ফর্ম -7 নিয়ে একই সমস্যাটি পর্যবেক্ষণ করেছি।

তবে নোট করুন যে শর্টকোডের উপর ভিত্তি করে রেজিস্ট্রেশন is_adminকরা হচ্ছে_এটি_আরং ( গাজাজাপের উত্তর দেখুন )

দুটি দৃষ্টিভঙ্গি যা প্রথম দর্শনে বৈধ বলে মনে হয় (এবং কেন সেগুলি ভুল):

  1. (অপছন্দনীয়) প্লাগইন লেখক যখন প্রয়োজন হয় তখন কেবলমাত্র শর্টকোডগুলি রেজিস্টার করতে স্ক্রিপ্টটি অনুকূল করতে চেষ্টা করেছিলেন । এই ক্ষেত্রে লেখক বিবেচনা করেন নি যে শর্টকডটি আজাক্স অনুরোধে ব্যবহৃত হতে পারে।

    ভুল কারণ : এই অপ্টিমাইজেশনটি কোনও কার্যকারিতা লাভ সরবরাহ করে না। এটি কেবল বিশ্বব্যাপী "নিবন্ধিত শর্টকোডগুলি" অ্যারেতে একটি মান যুক্ত করে।

  2. (এটি সম্ভবত সম্ভাব্য এক) প্লাগইন লেখক এজাক্স অনুরোধগুলিতে শর্টকোডের জন্য সমর্থনটি ইচ্ছাকৃতভাবে অক্ষম করেছিলেন। যোগাযোগ-ফর্ম -7 এর সাথে এটি সম্ভবত সম্ভব কারণ ফর্মগুলি "অ্যাজ্যাক্সের মাধ্যমে জমা দিন" এ সেট করা যেতে পারে। যাইহোক, এই বৈশিষ্ট্যটির জন্য অতিরিক্ত জাভাস্ক্রিপ্ট ফাইলগুলি লোড করার জন্য ফর্মের প্রয়োজন যা শর্টকোডটি অ্যাজাক্সের মাধ্যমে পার্স করার সময় জাভাস্ক্রিপ্ট যুক্ত করার সময় লোড হয় না enqueue_scripts()

    "এটি ব্যবহার করবেন না: ফর্ম প্রদর্শিত হয় তবে সাবমিট বাটন ক্লিক করে কাজ হয় না। সময় নষ্ট!" এর মতো বাগ রিপোর্টগুলি প্রতিরোধ করতে লেখক অ্যাজাক্স সমর্থনটি অক্ষম করার সিদ্ধান্ত নিয়েছে!

    সুতরাং ব্যবহারকারী হয় হয় একটি গ্যারান্টেড-ওয়ার্কিং ফর্ম বা কোনও ফর্ম দেখতে পাবেন না।

    ভুল কারণ : চেক করা is_adminএখানে খারাপ অভ্যাস। ধ্রুবকটি DOING_AJAXসংজ্ঞায়িত এবং সত্য কিনা তা কনডিটনের পরীক্ষা করা উচিত ।

যদিও বেশিরভাগ প্লাগইনগুলি এই ধরণের শর্ত ব্যবহার করে না, অতীতে সমস্যার কারণে সম্ভবত যে কয়েকটি বাধা রয়েছে তা সম্ভবত এটিরই রয়েছে।

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


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

@ গাজাজাজাপ মতামতের জন্য ধন্যবাদ, আমি সম্পূর্ণ সম্মত! আমি আমার উত্তর আপডেট করেছি এবং আপনার ইনপুট যুক্ত করেছি যাতে এটি আরও স্পষ্ট হয় যে শর্তটি খারাপ অভ্যাস।
ফিলিপ

আমি মনে করি না # 2 সম্ভবত, কারণ এনকুই_স্ক্রিপ্টগুলি the_contentকল এবং অ্যাডমিন- আজাক্স কলগুলিকে প্রভাবিত করবে না ।
NoBugs

3

আসলে, অ্যাডমিনে শর্টকডগুলি নিবন্ধন করার কোনও কারণ নেই।

প্লাগইন লেখক যদি প্লাগইন ফর্ম আজাক্স অক্ষম করতে চান তবে তাদের করা উচিত

if (defined('DOING_AJAX') && DOING_AJAX)

পরিবর্তে চেক করার জন্য অ্যাডমিন হয়।

নোট করুন যে ভবিষ্যতে, শর্টকেকটি মূল এম্বেড হবে কারণ এটি একটি "বৈশিষ্ট্যযুক্ত প্লাগইন"।

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

এটি বলেছিল, আপনার সম্ভাবনা থাকতে হবে:

  1. লেখকগণের সাথে যোগাযোগ করুন এবং দেখুন যে তারা সেই আচরণটি ঠিক করতে পারে কিনা
  2. নিজেই সমাধান বের করার চেষ্টা করুন

# 2 সম্পর্কিত, আসলে এমন লাইব্রেরি রয়েছে যা is_adminসত্য হতে বাধ্য করতে পারে। তারা হ্যাকিশ দ্বারা, এবং আমি উত্পাদন কখনও তাদের ব্যবহার করব না।

একটি উদাহরণ প্যাচওয়ার্ক

এটি ব্যবহার করে আপনি কোনও পিএইচপি কাস্টম ফাংশন ওভাররাইড করতে পারেন।

একটি এমইউ প্লাগইনে আপনি এটি করতে পারেন (সম্পূর্ণরূপে নিরীক্ষণ):

add_action('muplugins_loaded', function() {
  if ( defined('DOING_AJAX') && DOING_AJAX ) {
     require 'path/to/Patchwork.php';
     Patchwork\replace("is_admin", function() {
        return FALSE;
     });
  }
});

এটি is_admin()আজাক্স অনুরোধে প্রত্যাবর্তনকে মিথ্যা করে দেবে।

তবে, যেমনটি বলা হয়েছে, এটি বেশ হ্যাকিশ, এবং অন্যান্য প্লাগইনগুলি (এবং মূল) অপ্রত্যাশিত প্রভাবগুলির সাথে প্রভাব ফেলবে।

আর একটি জিনিস যা আপনি করতে পারেন তা হ'ল অ্যাডমিনের অনুরোধগুলিতে প্লাগইন শর্টকোড হ্যান্ডলারটি নিবন্ধভুক্ত করা।

যেমন যদি প্লাগইন কোড হয়:

if (! is_admin()) {
  add_shortcode( 'shortcode' , 'plugin_shortcode_handler' );
}

তারপরে আপনি অন্য একটি প্লাগইন লিখতে পারেন যা এটি করে:

if (is_admin()) {
  add_shortcode( 'shortcode' , 'plugin_shortcode_handler' );
}

এইভাবে উভয় ক্ষেত্রেই শর্টকোড যুক্ত করা হবে।

এটি অন্য প্লাগইন কোডের উপর নির্ভর করে একা কাজ করতে পারে বা নাও পারে, তবে এর কোনও সাধারণ উত্তর নেই।


আপনি add_shortcode('shortcode', array('their-class', 'their-function') )বা অনুরূপ করতে পারেন ।
NoBugs

@ নোব্যাগ অবশ্যই :)
গাজাজাপ

বা আরও ভাল "ওয়ার্কআরাউন্ড", কেবলমাত্র সাইটের মূল পৃষ্ঠাতে বা পৃষ্ঠায় পোস্ট করুন, যা নেক্সটজেন বিদ্রূপজনকভাবে তা করে।
NoBugs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.