কারেন্ট_শর্টকোড () - বর্তমানে ব্যবহৃত শর্টকোড সনাক্ত করুন


11

একটি প্লাগইন ক্লাসে আমি জনসাধারণের ডেটার জন্য সহজ ক্ষেত্রগুলি সরবরাহ করতে চাই: ইমেল, ফোন নম্বর, টুইটার ইত্যাদি তালিকাটি বাড়ানো যেতে পারে।

দেখুন প্লাগ ইন জন পরিচিতি ডেটা বিস্তারিত জানার জন্য GitHub থেকে।

ব্যবহারটি সহজ রাখতে, আমি শর্টকডগুলিও অফার করতে চাই যা টাইপ করা সহজ:

  • [public_email]
  • [public_phone]
  • [public_something]

পার্থক্য শুধুমাত্র দ্বিতীয় অংশ। আমি শর্টকডগুলির জন্য আরও যুক্তি চাই না কারণ সেগুলি ত্রুটিযুক্ত one সুতরাং আমি আমার প্লাগইন ক্লাসে সমস্ত ক্ষেত্রের জন্য একটি শর্টকোড হ্যান্ডলার নিবন্ধন করি :

foreach ( $this->fields as $key => $value )
{
    add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}

এখন shortcode_handler()কোন শর্টকোডটি ডাকা হয়েছে তা জানতে হবে। আমার প্রশ্ন: আমি এটি কীভাবে করব?

আমার বর্তমান কাজের এক অন্য কাজ:

protected function current_shortcode()
{
    $backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
    return $backtrace[3]['args'][0][2];
}

এই ... জন্য কাজ করে the_content()। তবে এটি মার্জিত বা মজবুতও নয়।
আমি পড়েছি wp-includes/shortcodes.php, তবে কীভাবে এটি আরও ভাল করা যায় তা এখনই দেখতে পাচ্ছি না।


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

@ টসচো সম্মত, আমি মনে করি এটি সত্যিই একটি সমস্যা, শর্টকোডগুলি যেভাবে করা হয়েছে তার একটি পুনঃনির্মাণ, (উইজেটের মতো আরও ওওপি আলিঙ্গন করা) মনে রাখা উচিত। আমি এটিতে সহায়তা করতে পছন্দ করব এবং পরে এটি কোরকে আপডেট হিসাবে প্রেরণ করব।
ওয়েবর্ড

@ ব্রাজোফিলো ঠিক আছে, আমি এখনই এটি করেছি।
ফুসিয়া

উত্তর:


3

এটি অপরিশোধিত , তবে কলব্যাক ফাংশনটি একটি আর্গুমেন্টের অ্যারে দিয়ে সরবরাহ করা হয়, $argsযা শর্টকোডের সাথে সরবরাহিত পরামিতিগুলি (যদি থাকে) দেয়। জিরোথ এন্ট্রিটিতে কখনও কখনও ব্যবহৃত শর্টকোডের নাম থাকে (যেমন public_email)। মাঝে মাঝে আমার মানে ...

বৈশিষ্ট্য অ্যারে (ts অ্যাটস [0]) এর শূন্যতম এন্ট্রিতে শর্টকোড রেজেক্সের সাথে মেলে এমন স্ট্রিং থাকবে তবে কেবল যদি এটি কলব্যাক নাম থেকে পৃথক হয়, যা অন্যথায় কলব্যাক ফাংশনের তৃতীয় আর্গুমেন্ট হিসাবে উপস্থিত হয়।

( কোডেক্স দেখুন ) আপনার উদ্দেশ্য তারপর জন্য $atts[0]পারেন উপস্থিত থাকবে public_email, public_phoneইত্যাদি

function shortcode_handler($atts,$content=NULL){
     if(!isset($atts[0]))
         return; //error?

     switch($atts[0]):
         case 'public_email':
              //deal with this case
              break;
         case 'public_phone':
              //deal with this case
              break;
         case 'public_something':
              //deal with this case
              break;
     endswitch;   
}

আহ, আমার মনে আছে, আমি অনেক আগে এই জাতীয় কিছু নিয়ে এসেছি। আমার ক্ষেত্রে এটি শর্টকোড হ্যান্ডলারের তৃতীয় যুক্তি। প্রথমটি $args, দ্বিতীয় $contentএবং শেষটি শর্টকোড!
ফুসিয়া

সত্যি? শর্টকোড 'শর্টকোড_হ্যান্ডলার' কলব্যাকের নাম থেকে পৃথক ... আমি ভাবতাম এটি এটিকে দেওয়া হত $args। তবে যদি এটি আপনার পক্ষে কাজ করে ...: D।
স্টিফেন হ্যারিস

2

স্টিফেন হ্যারিস উত্তরের উপর ভিত্তি করে আমি আমার সমস্ত ক্যাডারকে একটি তৃতীয় যুক্তি স্বীকার করতে বাধ্য করলাম, যা সংক্ষিপ্ত নাম:

/**
 * Handler for all shortcodes.
 *
 * @param  array  $args
 * @param  NULL   $content Not used.
 * @param  string $shortcode Name of the current shortcode.
 * @return string
 */
public function shortcode_handler(  $args = array (), $content = NULL, $shortcode = '' )
{
    $key = $this->current_shortcode_key( $shortcode );
    $args['print'] = FALSE;
    return $this->action_handler( $key, $args );
}

/**
 * Returns the currently used shortcode. Sometimes.
 *
 * @return string
 */
protected function current_shortcode_key( $shortcode )
{
    return substr( $shortcode, 7 );
}

আমার প্রশ্নের লিঙ্কযুক্ত প্লাগইনে এটি ক্রিয়াতে দেখুন।

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