當我們進行 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 這個全局變量能夠讓我們訪問到當前留言的所有數據,所以可以讓我們對留言做任何事情。