10個高級WordPress自定義字段技巧
但WordPress早已不是一個流行的博客程序,而是一個方便的建站程序。稍復雜一點的站點,幾乎避不可少的要使用到自定義字段,比如做個產品網站,要錄入產品的各種參數,你也可以選擇在文章內容中直接錄入,但那缺乏靈活性,不方便擴展。
下面則是10個比較高級的WordPress自定義字段使用技巧,說是高級,其實也未必,代碼并不復雜,只是可能你會沒想到這樣弄,所以,WP開發者朋友看看還是有好處的。
1. 給帖子設定時間期限
問題:有時候 (例如, 您正在管理一篇辯論搞), 您希望發布一篇文章,然后在一個固定的時間自動關閉文章顯示。這看起來很不容易,但事實絕非如此,您有自定義字段的權利。
解決方案:編輯您的主題,用下面的“hacked” 循環來替換當前 WordPress 中的循環:
- <?php
- if (have_posts()) :
- while (have_posts()) : the_post(); ?>
- $expirationtime = get_post_custom_values('expiration');
- if (is_array($expirationtime)) {
- $expirestring = implode($expirationtime);
- }
- $secondsbetween = strtotime($expirestring)-time();
- if ( $secondsbetween > 0 ) {
- // For example...
- the_title();
- the_excerpt();
- }
- endwhile;
- endif;
- ?>
創建一篇文章在一個固定的時間或日期之后過期,您所需要的僅僅是自定義一個字段。指定一個關鍵字標識 expiration 為日期或者時間格式 (必須為 mm/dd/yyyy 00:00:00)。在這個時間之后這篇文章就不顯示了。
代碼解釋:這段代碼簡單的 WordPress 循環會自動查詢是否存在有自定義字段叫 expiration。如果存在,對比自定義時間跟當前的時間。
2. 確定如何使博客文章顯示在首頁
問題:我總是想知道為什么有 95% 的博客選擇在博客首頁中全文顯示發布過的 所有/em> 文章。當然,WordPress 中并沒有默認的內置選項來告訴您如何顯示一篇文章。但是等等:通過自定義字段我們就可以很容易地實現。
解決方案:下面的技巧可以幫組您定義如何顯示文章在您的首頁。這兩個值是需要用到的:
全文瀏覽
僅顯示摘要
我們會再一次用到自定義 WordPress 循環。在您的 index.php 文件中找到循環,然后用下面的代碼來替換:
- <?php if (have_posts()) :
- while (have_posts()) : the_post();
- $customField = get_post_custom_values("full");
- if (isset($customField[0])) {
- //Custom field is set, display a full post
- the_title();
- the_content();
- } else {
- // No custom field set, let's display an excerpt
- the_title();
- the_excerpt();
- endwhile;
- endif;
- ?>
在這段代碼中,摘要作為默認顯示項。為了在您的博客首頁中顯示全文,那么您需要簡單地編輯文章,給自定義字段 full 賦一個任意值。
代碼解釋:這段代碼更加簡單。首先,創建一個類似 full 的自定義字段,如果被賦值,那么顯示全文,反之,顯示摘要。
如果當前日期或時間等于或者大于自定義字段 expiration 中的值,那么這篇文章就不會顯示了。注意,這段代碼不會刪除或取消您的文章的發布,僅僅是通過循環不讓文章顯示。
3.心情顯示以及當前收聽的歌曲
問題:大概在五六年錢,我的博客是通過一個叫LiveJournal的平臺來運行的。當然,這個遠遠沒有WordPress優秀,但它有一個非常好的特征是WordPress所沒有的。例如,它允許用戶來顯示當他們在撰寫博客時的心情和正在收聽的音樂。
盡管我沒有把這些特征應用到我的博客中,我想很多博客們對這個在WordPress中的應用還是會非常感興趣的。
解決方案:打開您的文件 single.php (或者修改您的文件 index.php ), 并將下面的代碼粘貼到您想要的任意一個循環中:
- $customField = get_post_custom_values("mood");
- if (isset($customField[0])) {
- echo "Mood: ".$customField[0];
- }
保存文件。好了,當您新撰寫一篇文章的時候,就創建一個自定義字段,叫做 mood, 然后輸入您當前的心情。
代碼解釋:自定義字段方法非常簡單,這個跟眾所周知的,在首頁的摘要旁顯示您的縮略圖的方法沒有多大區別。看來僅需要類似 mood 這樣的自定義字段,如果設置了值,那么就顯示。
4. 給您的文章添加Meta描述符
問題:WordPress, 令人驚訝的是,不使用描述標簽的作為meta預設值。
當然,對于seo來說,現在的meta標簽已經沒有以前那么重要了。然而,盡管如此,它們依然可以提高您的博客在搜索引擎中的排名。
如何又是使用自定義字段來創建描述單獨帖子的meta描述呢?
解決方案:打開文件 header.php。復制下面的代碼到 <head> 和 </head>標簽內。
- <meta name="description" content="
- <?php if ( (is_home()) || (is_front_page()) ) {
- echo ('Your main description goes here');
- } elseif(is_category()) {
- echo category_description();
- } elseif(is_tag()) {
- echo '-tag archive page for this blog' . single_tag_title();
- } elseif(is_month()) {
- echo 'archive page for this blog' . the_time('F, Y');
- } else {
- echo get_post_meta($post->ID, "Metadescription", true);
- }?>">
代碼解釋:為了生成 meta 的描述語,這里采用的是 WordPress 中廣泛采用的條件式標簽來決定哪些用戶會訪問這個頁面。
目錄頁,標簽頁,存檔頁及站點首頁,使用的都是靜態 meta 描述語。編輯行3,7,9來定義您自己的頁面。這樣,在文章中,代碼會尋找自定義字段 Metadescription,并將其中的值作為 meta 描述語。
5. 鏈接到外部資源
問題:很多博客們都問過我下面的問題:“我如何直接鏈接到外部來源,而不是創建一個帖子,僅僅是為了告訴訪客們怎么去訪問其他站點。”
這個問題可以通過自定義字段來實現。讓我們來看看怎么才能做到這點。
解決方案:首先要做的是打開您的文件 functions.php,然后粘貼下面的代碼:
- function print_post_title() {
- global $post;
- $thePostID = $post->ID;
- $post_id = get_post($thePostID);
- $title = $post_id->post_title;
- $perm = get_permalink($post_id);
- $post_keys = array(); $post_val = array();
- $post_keys = get_post_custom_keys($thePostID);
- if (!emptyempty($post_keys)) {
- foreach ($post_keys as $pkey) {
- if ($pkey=='url1' || $pkey=='title_url' || $pkey=='url_title') {
- $post_val = get_post_custom_values($pkey);
- }
- }
- if (emptyempty($post_val)) {
- $link = $perm;
- } else {
- $link = $post_val[0];
- }
- } else {
- $link = $perm;
- }
- echo '<h2><a href="'.$link.'" rel="bookmark" title="'.$title.'">'.$title.'</a></h2>';
- }
完成之后,打開文件 index.php 并替換輸出的標準代碼…
- <h2><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”Permanent Link to <?php the_title(); ?>”><?php the_title(); ?></a></h2>
… 用新創建的方面 print_post_title() :
- <?php print_post_title() ?>
好了,當您需要指向處自己博客之外的文章,僅僅需要滾動您的編輯器的下方,創建或者選擇自定義字段 url1 或 title_url 或 url_title ,輸入外部 URL 地址就可以了。
代碼解釋:這是一段非常友好的自定義功能替換 the_title() WordPress 函數。
基本上而言,這段功能跟老的 the_title() 函數一樣優秀,而且也是一個自定義字段。如果查找到字段 url1 或 title_url 或 url_title 的值,那么就會直接鏈接到外部站點而不是博客文章。如果自定義字段值沒有找到,就會簡單地顯示鏈接本身。
6. 嵌入自定義的CSS樣式
問題:某些文章可以需要額外的 CSS 樣式。當然,您也可以選擇 WordPress 的編輯器進入html 模式進行編輯,加入內置的樣式到文章內容中。但即使內置樣式是有效的,但這總不是最簡單的處理方法。
用自定義字段,我們可以很容易地為個別文章創建新的 CSS 類,并自動加載它們到博客的 header 中。
解決方案:首先,打開文件 header.php ,然后哦插入如下的代碼到 HTML 標簽<head> 跟 </head>中:
- <?php if (is_single()) {
- $css = get_post_meta($post->ID, 'css', true);
- if (!emptyempty($css)) { ?>
- <style type="text/css">
- <?php echo $css; ?>
- <style>
- <?php }
- } ?>
7. 重定義The <title>標簽
問題:對于博客,就想其他所有類型的網站一樣,內容為王。而SEO對您的目標流量是至關重要的。wordpress主題的默認值是沒有對標簽 <title> 做過優化的。
某些插件,如眾所周知的“All in One SEO Pack”重寫了這個,但您依然可以通過自定義字段來解決。
解決方案:打開文件 header.php 并編輯。找到標簽 <title> tag 并替換下面的代碼:
- <title>
- <?php if (is_home () ) {
- bloginfo('name');
- } elseif ( is_category() ) {
- single_cat_title(); echo ' - ' ; bloginfo('name');
- } elseif (is_single() ) {
- $customField = get_post_custom_values("title");
- if (isset($customField[0])) {
- echo $customField[0];
- } else {
- single_post_title();
- }
- } elseif (is_page() ) {
- bloginfo('name'); echo ': '; single_post_title();
- } else {
- wp_title('',true);
- } ?>
- </title>
然后,如果您想自定義 title 標簽,簡單地創建自定義字段 title, 并為它賦值就可以了。
代碼解釋:通過這段代碼,我為各個類別的帖子,如首頁,分頁,目錄頁及博客文章用不同標記模板生成一個自定義 。
如果當前活動的頁面是篇博客文章,代碼會尋找自定義字段 title。如果找到了,就會顯示自定義字段中的值,反之,顯示標準的 single_post_title() 生成的標題。
8. 禁止搜索引擎搜索博客文章
問題:您是否曾想過創建一篇半隱私文章,允許普通讀者訪問,而不是搜索引擎?如果是這樣的話,最簡單的解決方案是…您肯定猜到了!用自定義字段。
解決方案:首先,獲取您不想被搜索引擎索引的文章的ID號。我們以ID為17的作個范例。
打開文件 header.php 粘貼下面的代碼到標簽 <head>和</head>中:
- <?php $cf = get_post_meta($post->ID, 'noindex', true);
- if (!emptyempty($cf)) {
- echo '<meta name="robots" content="noindex"/>';
- }
- ?>
僅此而已,這對于您不想將某些信息被搜索引擎索引到的是非常有用的!
代碼解釋:在這個示例中,我們使用 get_post_meta() 方法來檢索自定義字段 noindex。如果值設置了,那么添加標記 。
9. 用自定義函數輕松地獲取或者打印自定義字段值
問題:現在我們已經展示給了您不少優秀地怎么應用自定義字段的方法,那么怎樣才能輕松地用自動化的函數來獲取自定義字段值呢?
對于程序員或者對PHP比較熟悉的人員來說,獲取自定義值并不是什么困難的事,但對于非程序員而言卻非常痛苦。通過這個方法,獲得任何自定義字段值從未如此簡單。
解決方案:將一下代碼方法粘貼到您的主題文件 functions.php 中。如果主題中沒有這個文件,那么就請創建它。
- function get_custom_field_value($szKey, $bPrint = false) {
- global $post;
- $szValue = get_post_meta($post->ID, $szKey, true);
- if ( $bPrint == false ) return $szValue; else echo $szValue;
- }
好了,通過下面的代碼來調用這個方法就會獲得自定義字段的值:
- <?php if ( function_exists('get_custom_field_value') ){
- get_custom_field_value('featured_image', true);
- } ?>
代碼解釋:首先,我們使用 PHP 的函數 function_exists() 判斷是否存在 get_custom_field_value 方法是否已經在主題中定義過了。如果存在,我們就可以使用。***個參數是自定義字段名稱 (這里是, featured_image), 第二個參數是允許您直接輸出值 (true) 或者以備作為之后的PHP 使用 (false)。
10.根據需要隨時添加Digg按鈕
問題:從眾所周知的 Digg.com 中獲得點擊量的***的方法是將“Digg this”按鈕添加到您的每一篇文章中,瀏覽者可以協助您成功發布這篇文章。
但是,對于您的所有博客都采用這個按鈕?當然不是。例如,如果您撰寫了一條關于來改善您的網站的聲明,提交到Digg服務,那是毫無價值的。
解決方案:再次請求自定義字段完成。只要根據下列的步驟開始就可以了:
1. 打開您的文件 single.php 并將這些行粘貼到您想顯示“Digg this”按鈕的地方:
- <?php $cf = get_post_meta($post->ID, 'digg', true);
- if (!emptyempty($cf)) {
- echo 'http://digg.com/tools/diggthis.js" type="text/javascript">'} ?>
2. 一旦您保存了文件 single.php , 您就可以創建自定義字段 digg 并可以賦任意值。如果賦值,按鈕就會顯示在文章中。
代碼解釋:這段代碼非常簡單。在自定義代碼上找到自定義字段 digg, 代碼顯示“Digg this” 按鈕。Digg本身提供JavaScript 用戶顯示“Digg this” 按鈕。
【編輯推薦】