2013-04-22 76 views
0

我想介紹自己的Wordpress和後,我安裝的主題,走進它做了一些修改,我發現這個電話:WordPress的do_action功能援助

\可溼性粉劑內容\主題\抓-everest \ footer.php

do_action('catcheverest_site_generator'); 

我就跟蹤到這個功能,我完全失去了:

function do_action($tag, $arg = '') { 
    global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter; 

    if (! isset($wp_actions)) 
     $wp_actions = array(); 

    if (! isset($wp_actions[$tag])) 
     $wp_actions[$tag] = 1; 
    else 
     ++$wp_actions[$tag]; 

    // Do 'all' actions first 
    if (isset($wp_filter['all'])) { 
     $wp_current_filter[] = $tag; 
     $all_args = func_get_args(); 
     _wp_call_all_hook($all_args); 
    } 

    if (!isset($wp_filter[$tag])) { 
     if (isset($wp_filter['all'])) 
      array_pop($wp_current_filter); 
     return; 
    } 

    if (!isset($wp_filter['all'])) 
     $wp_current_filter[] = $tag; 

    $args = array(); 
    if (is_array($arg) && 1 == count($arg) && isset($arg[0]) && is_object($arg[0])) // array(&$this) 
     $args[] =& $arg[0]; 
    else 
     $args[] = $arg; 
    for ($a = 2; $a < func_num_args(); $a++) 
     $args[] = func_get_arg($a); 

    // Sort 
    if (!isset($merged_filters[ $tag ])) { 
     ksort($wp_filter[$tag]); 
     $merged_filters[ $tag ] = true; 
    } 

    reset($wp_filter[ $tag ]); 

    do { 
     foreach ((array) current($wp_filter[$tag]) as $the_) 
      if (!is_null($the_['function'])) 
       call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); 

    } while (next($wp_filter[$tag]) !== false); 

    array_pop($wp_current_filter); 
} 

能否描述上述情況下的數據流?

回答

2

的源代碼看起來很複雜,但是從實際的觀點來看,它足以知道do_action創建一個鉤子,它允許您通過掛鉤函數(使用add_action)在特定位置執行代碼。就你而言,主題作者允許你在頁腳中執行代碼。您可以在您的functions.php文件或插件中放置以下功能。它會在主題的頁腳中回顯「Hello world」。

function my_site_generator(){ 
    echo 'Hello world'; 
} 
add_action('catcheverest_site_generator', 'my_site_generator'); 
0

這是一個令人難以置信的廣泛問題,超出了Stack Overflow的範圍。

操作和過濾器或掛鉤是'Wordpress'的做事方式。在Wordpress頁面上有一個按優先級執行操作的循環,然後返回在將其應用到頁面之前要過濾的內容。

有關於操作和過濾器的完整書籍,您應該查看一些Wordpress插件書籍以獲取更多詳細信息。

這本書對我的幫助噸明白髮生了什麼事情,當我在學習:

http://www.amazon.com/Professional-WordPress-Plugin-Development-Williams/dp/0470916222

+0

謝謝指導! – Andrew 2013-04-22 18:59:57