ওয়ার্ডপ্রেস হুকের একটি তালিকা আমি কোথায় পাব?


48

সমস্ত ওয়ার্ডপ্রেস হুক এবং ওভার-রেডেবল ফাংশনগুলির (প্লাগেবল, স্ক্রিপ্টযোগ্য, ইত্যাদি) একটি তালিকা কোথায় পাব?

সম্পাদনা: প্লাগইন এখানে তালিকাভুক্ত করা হয়েছে


আমি যখন হুক তথ্যের সন্ধান করছি তখন এটি আমার গো টু সাইট ... ওয়ার্ডপ্রেস হুক ডেটাবেস
কিথ এস

1
ওয়ার্ডপ্রেস অবশেষে এর সমস্ত হুক নথিভুক্ত করেছে । : ডি আপনি ব্রাউজ এবং সেখানে অনুসন্ধান করতে পারেন।
স্যাম

উত্তর:


45

@ অ্যারলেন: কীথ এস যেমন অ্যাডাম ব্রাউন এর হুক্সের তালিকা দেখায় ওয়ার্ডপ্রেসের জন্য হুকের ডিফাক্টো রিসোর্স। তবে এটি নিখুঁত নয়:

  • হুকগুলি কখন ডাকা হয় তার ক্রম হিসাবে এটি প্রদর্শন করে না,
  • এটি ফাইলের নাম বা লাইন নম্বর সরবরাহ করে না যেখানে অনুরোধ করা হয়েছিল,
  • এটি পাস হওয়া প্রচুর যুক্তি সরবরাহ করে না,
  • এটি সম্পূর্ণ তালিকা নয় কারণ কিছু হুককে ডায়নামিকভাবে বলা যেতে পারে,
  • এবং এটি প্লাগিনগুলি থেকে হুকগুলি দেখায় না।

সুতরাং যখন হুকগুলি historতিহাসিকভাবে যুক্ত করা হয়েছিল তখন বিশেষত বোঝার জন্য অ্যাডামের তালিকাটি একটি দুর্দান্ত সংস্থান, এটি প্রায় ততটা কার্যকর নয় যেমন আপনি নিজের সাইটে কোনও প্রদত্ত পৃষ্ঠায় হুককে ইনস্ট্রুমেন্ট করতে সক্ষম হয়েছিলেন।

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

সুতরাং এখানে যন্ত্রের মতো দেখতে একটি স্ক্রিনশট রয়েছে:

কার্যত ওয়ার্ডপ্রেস প্লাগিনের জন্য ইনস্ট্রুমেন্ট হুকের স্ক্রিনশট

আপনি ইউআরএল প্যারামিটার ব্যবহার করে যন্ত্রটি ট্রিগার করেছেন instrument=hooks, অর্থাত:

http://example.com?instrument=hooks

এবং প্রতিশ্রুতি হিসাবে, এখানে উত্স (বা এটি এখানে ডাউনলোড করুন ):

<?php
/*
Plugin Name: Instrument Hooks for WordPress
Description: Instruments Hooks for a Page. Outputs during the Shutdown Hook.
Version: 0.1
Author: Mike Schinkel
Author URI: http://mikeschinkel.com
*/

if ($_GET['instrument']=='hooks') {

    add_action('shutdown','instrument_hooks');
    function instrument_hooks() {
        global $wpdb;
        $hooks = $wpdb->get_results("SELECT * FROM wp_hook_list ORDER BY first_call");
        $html = array();
        $html[] = '<style>#instrumented-hook-list table,#instrumented-hook-list th,#instrumented-hook-list td {border:1px solid gray;padding:2px 5px;}</style>
<div align="center" id="instrumented-hook-list">
    <table>
        <tr>
        <th>First Call</th>
        <th>Hook Name</th>
        <th>Hook Type</th>
        <th>Arg Count</th>
        <th>Called By</th>
        <th>Line #</th>
        <th>File Name</th>
        </tr>';
        foreach($hooks as $hook) {
            $html[] = "<tr>
            <td>{$hook->first_call}</td>
            <td>{$hook->hook_name}</td>
            <td>{$hook->hook_type}</td>
            <td>{$hook->arg_count}</td>
            <td>{$hook->called_by}</td>
            <td>{$hook->line_num}</td>
            <td>{$hook->file_name}</td>
            </tr>";
        }
        $html[] = '</table></div>';
        echo implode("\n",$html);
    }

    add_action('all','record_hook_usage');
    function record_hook_usage($hook){
        global $wpdb;
        static $in_hook = false;
        static $first_call = 1;
        static $doc_root;
        $callstack = debug_backtrace();
        if (!$in_hook) {
            $in_hook = true;
            if ($first_call==1) {
                $doc_root = $_SERVER['DOCUMENT_ROOT'];
                $results = $wpdb->get_results("SHOW TABLE STATUS LIKE 'wp_hook_list'");
                if (count($results)==1) {
                    $wpdb->query("TRUNCATE TABLE wp_hook_list");
                } else {
                    $wpdb->query("CREATE TABLE wp_hook_list (
                    called_by varchar(96) NOT NULL,
                    hook_name varchar(96) NOT NULL,
                    hook_type varchar(15) NOT NULL,
                    first_call int(11) NOT NULL,
                    arg_count tinyint(4) NOT NULL,
                    file_name varchar(128) NOT NULL,
                    line_num smallint NOT NULL,
                    PRIMARY KEY (first_call,hook_name))"
                    );
                }
            }
            $args = func_get_args();
            $arg_count = count($args)-1;
            $hook_type = str_replace('do_','',
                str_replace('apply_filters','filter',
                    str_replace('_ref_array','[]',
                        $callstack[3]['function'])));
            $file_name = str_replace($doc_root,'',$callstack[3]['file']);
            $line_num = $callstack[3]['line'];
            $called_by = $callstack[4]['function'];
            $wpdb->query("INSERT wp_hook_list
                (first_call,called_by,hook_name,hook_type,arg_count,file_name,line_num)
                VALUES ($first_call,'$called_by()','$hook','$hook_type',$arg_count,'$file_name',$line_num)");
            $first_call++;
            $in_hook = false;
        }
    }
}

আমি ... এটি এমন একটি জিনিস যা আপনি কেবল একবার বা দু'বার ব্যবহার করতে পারেন তবে আপনি যখন এটি ব্যবহার করেন, আপনি তারকাদের ধন্যবাদ জানান :)
কিথ এস

1
মাইক, খুব দুর্দান্ত! তবে প্রতিটি ফিল্টার / ক্রিয়া কী করে তা বোঝার জন্য আপনি কী সুপারিশ করবেন? এমন কোনও ফাইল আছে যেখানে তাদের সমস্ত 'ক্রিয়াকলাপ' এর সাথে তালিকাবদ্ধ রয়েছে? ধন্যবাদ!
অমিত

1
@ অ্যামিট - হ্যাঁ, এটাই কঠিন প্রশ্ন। :) জিজ্ঞাসা করার জন্য ধন্যবাদ. দুর্ভাগ্যক্রমে, আমি স্বয়ংক্রিয় করার কোনও উপায় দেখতে পাচ্ছি না যেমন আমি উপরের হুকগুলির তালিকা তৈরির জন্য করেছি তাই আপনার কাছে আমার কাছে সঠিক উত্তর নেই answer আদর্শভাবে প্রতিটি হুকের জন্য কেউ একটি দুর্দান্ত ব্লগ পোস্ট লিখতেন (বা এখানে একটি প্রশ্ন জিজ্ঞাসা করেছিলেন যা দুর্দান্ত উত্তর পেয়েছিল) এবং তারপরে "গুগল এটি" আপনার উত্তর হবে। যেমনটি, আমি একটি ডিবাগিং আইডিই (PhpStorm + XDEBUG, সেপ্টেম্বর 2010 পর্যন্ত মার্কিন ডলার 49) ব্যবহার করি এবং আমি ব্রেকপয়েন্টগুলি সেট করি এবং এক্সিকিউটিভ কোডের মাধ্যমে সন্ধান করি। যদিও এর থেকে আরও ভাল উপায় হতে পারে এবং অন্য কেউ যদি এটির কথা চিন্তা করে থাকে তবে দয়া করে আমাদের জানান!
মাইকচিনকেলে

বাহ, এটি আমি এখন পর্যন্ত দেখলাম সেরা উত্তর। যাইহোক এখানে।
অ্যারলেন বেলার

2
@ মাইক: দ্রুত প্রশ্ন, আপনি কেন এটি মেমরি বা অস্থায়ী স্ট্রিমের পরিবর্তে ডাটাবেসে সংরক্ষণ করেন?
hakre

4

ডিবাগ বার অ্যাকশন হুক্স প্লাগইন

বর্তমান অনুরোধের জন্য বরখাস্ত কর্মের একটি তালিকা প্রদর্শন করে। ডিবাগ বার প্লাগইন প্রয়োজন।



2

কোডেক্সের একটি অ্যাকশন রেফারেন্স এবং একটি ফিল্টার রেফারেন্স রয়েছে । অ্যাডাম ব্রাউন একটি হুক ডাটাবেস তৈরি করেছেন যার উত্স কোডে সমস্ত হুক রয়েছে এবং উইকি পৃষ্ঠাগুলি, সংস্করণ তথ্য এবং উত্স কোডের লিঙ্কগুলি থেকে ডকুমেন্টেশন যুক্ত করেছে। আপনি কোডেক্সে ডকুমেন্টেশন লিখে এটিকে উন্নত করতে পারেন।

অবশ্যই, অন্য কিছু তথ্যের উপর নির্ভর করে কিছু হুক গতিশীল। wp_transition_post_statusফাংশনটি নিন :

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("${old_status}_to_$new_status", $post);
    do_action("${new_status}_$post->post_type", $post->ID, $post);
}

আপনি যদি কাস্টম পোস্টের ধরণ eventএবং একটি কাস্টম পোস্টের স্থিতি নিবন্ধ করেন তবে আপনার অ্যাকশন হুক cancelledথাকবে willcancelled_event


অ্যাডাম ব্রাউনস ডাটাবেস কেবল সেই 2 পৃষ্ঠাগুলির সংমিশ্রণ নয়, এতে ওয়ার্ডপ্রেসের প্রতিটি ক্রিয়া এবং ফিল্টার তালিকাভুক্ত রয়েছে। বা এটি কি আপনি বোঝাতে চেয়েছিলেন তা নয়।
অ্যারলেন বেলারর

@ অ্যালেন: হ্যাঁ, আমি এটি আবার লিখেছি যাতে এটি আরও স্পষ্ট।
জান ফ্যাব্রি

1

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

<?php
/*
Plugin Name: Hooks
Plugin URI: http://example.com/
Description: Hooks
Version: 1.00
Author: Hooks
Author URI: http://example.com/
*/

add_action('all','hook_catchall');
function hook_catchall(&$s1 = '', &$s2 = '', &$s3 = '', &$s4 = '') {
    echo "<h1>1</h1>\n";
    print_r($s1);
    echo "<br />\n";
    echo "<h1>2</h1>\n";
    print_r($s2);
    echo "<br />\n";
    echo "<h1>3</h1>\n";    
    print_r($s3);
    echo "<br />\n";
    echo "<h1>4</h1>\n";    
    print_r($s4);
    echo "<br />\n";
    return $s1;
}

এটি সুন্দর নাও হতে পারে তবে এটি কিছু দৃশ্যের মধ্যে দ্রুত এবং সহজতম উপায় হতে পারে (আমি প্রায়শই পুরো আইডিই ব্যবহার না করে ছোট, নোটপ্যাড + কমান্ড-লাইন প্রকল্পগুলিতে ছোট জিনিস ঠিক করতে "প্রিন্টফ ডিবাগিং" ব্যবহার করি)।
Synetech

0

আমি এইগুলি হুকের ক্রম সন্ধান করতে ব্যবহার করি। পেতে filtersশুধু পরিবর্তন add_actionকরতে add_filter

function echo_all_hooks() {
$not_arr = array('gettext','sanitize_key','gettext_with_context','attribute_escape');
if(!in_array(current_filter(),$not_arr)) echo current_filter()."<br/>";
}
add_action('all','echo_all_hooks');

0

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

প্রতিটি বর্ণনা এখানে চিত্র বর্ণনা লিখুন


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