it-swarm.asia

أين يمكنني العثور على قائمة من السنانير WordPress؟

أين يمكنني أن أجد قائمة بجميع سنان WordPress والوظائف التي يمكن التخلص منها بشكل مفرط (قابلة للتوصيل ، قابلة للبرمجة ، إلخ)؟

تحرير: البرنامج المساعد هو المدرجة هنا .

46
Arlen Beiler

Arlen: كما يشير Keith S قائمة Adams's Hooks هي مورد defacto من hooks لـ WordPress. ومع ذلك ، فهي ليست مثالية:

  • لا تظهر السنانير حسب ترتيبها ،
  • لا يوفر اسم الملف أو رقم السطر حيث تم استدعاء ،
  • لا يوفر عددًا من الحجج التي تم تمريرها ،
  • إنها ليست قائمة كاملة لأنه يمكن استدعاء بعض السنانير بشكل ديناميكي ،
  • ولا تظهر السنانير من الإضافات.

لذا ، على الرغم من أن قائمة آدم تعد مصدرًا رائعًا خاصةً لفهم الوقت الذي تمت فيه إضافة السنانير تاريخًا ، إلا أنها ليست مفيدة كما لو كنت قادرًا على ربط السنانير في أي صفحة معينة على موقعك.

لقد كنت أمارس هذه الفكرة لفترة من الوقت ، لذا دفعني سؤالك إلى كتابة البرنامج المساعد المسمى "أداة الخطافات في WordPress." يمكنك العثور علىالمصدر الكامل أدناهلقطة الشاشة ويمكنك أيضًا تنزيلها من Gist هنا.

إذن إليك لقطة شاشة لما يبدو عليه الجهاز:

Screenshot of Instrument Hooks for WordPress Plugin in action

تقوم بتشغيل الأداة باستخدام معلمة URL 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;
        }
    }
}
44
MikeSchinkel

البرنامج المساعد Debug Bar Action Hooks

يعرض قائمة بالإجراءات التي تم إطلاقها للطلب الحالي. يتطلب البرنامج المساعد شريط التصحيح.

  

4
sam

يحتوي الدستور على مرجع الإجراء و مرجع المرشح . أنشأ آدم براون قاعدة بيانات هوك التي تحتوي على جميع السنانير في الكود المصدري ، وتضيف الوثائق من صفحات الويكي ، ومعلومات الإصدار والروابط إلى الكود المصدري. يمكنك تحسينه عن طريق كتابة الوثائق في الدستور الغذائي.

بالطبع ، بعض السنانير ديناميكية ، اعتمادًا على البيانات الأخرى. خذ 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 ، فسوف يكون لديك ربط إجراءات cancelled_event.

2
Jan Fabry

على الرغم من البدائية ، وربما هذا الرمز المساعد يمكن أن تساعد؟ بدّل "add_action" بـ "add_filter" إذا كنت تريد إلقاء نظرة على المرشحات بدلاً من ذلك. قم بتحميل المكون الإضافي ثم قم بتحديث الصفحة الرئيسية للموقع. بمجرد التحميل ، سيكون من المألوف إلغاء تنشيطه ، لذلك فقط أعد تسمية ملف البرنامج المساعد ضمن مجلد الإضافات وقم بتحديث الموقع مرة أخرى - سيتم إلغاء تنشيطه تلقائيًا. لقد استخدمت هذه الخدعة عدة مرات لاستكشاف الأخطاء وإصلاحها أو العثور على مكان يمكنني إدراج شيء فيه.

<?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;
}
1
Volomike

كما تشيرkaiser لا تنشر الروابط فقط أنا تحسينه. لكن ليس من الممكن استخدام الشفرة بأكملها هنا ، لذا فإنني استخدم القليل من الصور هنا لشرح كيف تحتوي على قائمة كاملة لوصلات WordPress مع وصف كل منها. يمكنك العثور عليه هنا من أجل خطافات ، فصول ، وظائف ، إضافات ، enter image description here

لوصف كل enter image description here

0
sohan

أنا استخدم هذا للعثور على ترتيب السنانير. للحصول على 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
Wadde