當我們進行 WordPress 開發的時候,首先我們必須要了解主迴圈和全域性變數,這樣才知道可以訪問哪個全域性變數。下面就講解下 WordPress 主迴圈,以便能更好理解哪些全域性變數可以被主迴圈中的模板函式呼叫。

WordPress 主迴圈

WordPress 主迴圈 (The Loop) 是用來顯示日誌列表,和在單篇日誌頁面頁顯示留言列表的。

在預設主題的 index.php 中,主迴圈的程式碼如下:

<?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?>

have_posts() 和 the_post()這兩個函式都是類 WP_Query 的方法。

have_posts 這個函式去檢視當前顯示的日誌數是否達到了在 WordPress 後臺設定的要顯示的日誌數,這個主迴圈將會繼續直到達到為止。

如果你看過過 the_post 函式的原始碼,就會發現它會搜尋 $post 這個全域性變數。 the_post 函式獲取第一篇日誌 (隨後的日誌透過每次迴圈獲取下一個),並設定日誌的資料 (如作者,多重-頁面,等等),這些資料是 WordPress 賦給 $post 這個全域性變數的,所以我們可以訪問它。

the_post() 函式被呼叫之後,我們就可以使用許多模板函式和全域性變數。

下面就是現在可用的部分模板函式:

  • the_author:獲取作者的名字。
  • the_title:顯示當前日誌的標題。
  • the_content:顯示日誌的內容。
  • the_permalink:顯示日誌的永久連結的 URL 。
  • the_ID:顯示日誌的 ID 。

下面是在主迴圈中可用的全域性變數:

全域性變數 authordata:

global $authordata;
echo $authordata->display_name;

透過 authordata 這個全域性變數還可以獲取作者的下面這些資訊:last_name,first_name,ID,user_email,user_url,user_login,description 和其他。

全域性變數 post:

global $post;
echo $post->post_content;

透過 post 這個全域性變數還可以獲取文章的這些資訊:ID,post_title, post_author,post_date,post_excerpt,comment_count 和其他。

注意透過這種方法獲取的日誌內容是沒有經過過慮的。如果你想自己去操縱日誌的內容,比如自己設定日誌內容的顯示方式,透過這種方式獲取的日誌內容非常有用。

全域性變數 id:

global $id;
echo $id;

製作你自己的模板函式

假設我們寫了一個叫做 get_my_trackback 自定義的模板函式,它能夠在文章的留言迴圈中每次檢測到留言如果是 trackback 的時候做出一些動作。我們可以把這個函式放入 comment.php 模板檔案的 foreach 留言迴圈中。

<?php foreach ($comments as $comment) : ?><?php get_my_trackback();?><?php endforeach; /* end for each comment */ ?>

然後在當前主題的 function 檔案中新增 get_my_trackback 函式程式碼:

<?php function get_my_trackback() {
    global $comment;
    if (empty($comment))
        return;
    if ($comment->comment_type != 'comment') {
        //do trackback stuff
    }
}
?>

comments 這個全域性變數能夠讓我們訪問到當前留言的所有資料,所以可以讓我們對留言做任何事情。