10個(gè)高級(jí)WordPress自定義字段技巧
但WordPress早已不是一個(gè)流行的博客程序,而是一個(gè)方便的建站程序。稍復(fù)雜一點(diǎn)的站點(diǎn),幾乎避不可少的要使用到自定義字段,比如做個(gè)產(chǎn)品網(wǎng)站,要錄入產(chǎn)品的各種參數(shù),你也可以選擇在文章內(nèi)容中直接錄入,但那缺乏靈活性,不方便擴(kuò)展。
下面則是10個(gè)比較高級(jí)的WordPress自定義字段使用技巧,說是高級(jí),其實(shí)也未必,代碼并不復(fù)雜,只是可能你會(huì)沒想到這樣弄,所以,WP開發(fā)者朋友看看還是有好處的。
1. 給帖子設(shè)定時(shí)間期限
問題:有時(shí)候 (例如, 您正在管理一篇辯論搞), 您希望發(fā)布一篇文章,然后在一個(gè)固定的時(shí)間自動(dòng)關(guān)閉文章顯示。這看起來很不容易,但事實(shí)絕非如此,您有自定義字段的權(quán)利。
解決方案:編輯您的主題,用下面的“hacked” 循環(huán)來替換當(dāng)前 WordPress 中的循環(huán):
- <?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;
- ?>
創(chuàng)建一篇文章在一個(gè)固定的時(shí)間或日期之后過期,您所需要的僅僅是自定義一個(gè)字段。指定一個(gè)關(guān)鍵字標(biāo)識(shí) expiration 為日期或者時(shí)間格式 (必須為 mm/dd/yyyy 00:00:00)。在這個(gè)時(shí)間之后這篇文章就不顯示了。
代碼解釋:這段代碼簡單的 WordPress 循環(huán)會(huì)自動(dòng)查詢是否存在有自定義字段叫 expiration。如果存在,對(duì)比自定義時(shí)間跟當(dāng)前的時(shí)間。
2. 確定如何使博客文章顯示在首頁
問題:我總是想知道為什么有 95% 的博客選擇在博客首頁中全文顯示發(fā)布過的 所有/em> 文章。當(dāng)然,WordPress 中并沒有默認(rèn)的內(nèi)置選項(xiàng)來告訴您如何顯示一篇文章。但是等等:通過自定義字段我們就可以很容易地實(shí)現(xiàn)。
解決方案:下面的技巧可以幫組您定義如何顯示文章在您的首頁。這兩個(gè)值是需要用到的:
全文瀏覽
僅顯示摘要
我們會(huì)再一次用到自定義 WordPress 循環(huán)。在您的 index.php 文件中找到循環(huán),然后用下面的代碼來替換:
- <?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;
- ?>
在這段代碼中,摘要作為默認(rèn)顯示項(xiàng)。為了在您的博客首頁中顯示全文,那么您需要簡單地編輯文章,給自定義字段 full 賦一個(gè)任意值。
代碼解釋:這段代碼更加簡單。首先,創(chuàng)建一個(gè)類似 full 的自定義字段,如果被賦值,那么顯示全文,反之,顯示摘要。
如果當(dāng)前日期或時(shí)間等于或者大于自定義字段 expiration 中的值,那么這篇文章就不會(huì)顯示了。注意,這段代碼不會(huì)刪除或取消您的文章的發(fā)布,僅僅是通過循環(huán)不讓文章顯示。
3.心情顯示以及當(dāng)前收聽的歌曲
問題:大概在五六年錢,我的博客是通過一個(gè)叫LiveJournal的平臺(tái)來運(yùn)行的。當(dāng)然,這個(gè)遠(yuǎn)遠(yuǎn)沒有WordPress優(yōu)秀,但它有一個(gè)非常好的特征是WordPress所沒有的。例如,它允許用戶來顯示當(dāng)他們?cè)谧珜懖┛蜁r(shí)的心情和正在收聽的音樂。
盡管我沒有把這些特征應(yīng)用到我的博客中,我想很多博客們對(duì)這個(gè)在WordPress中的應(yīng)用還是會(huì)非常感興趣的。
解決方案:打開您的文件 single.php (或者修改您的文件 index.php ), 并將下面的代碼粘貼到您想要的任意一個(gè)循環(huán)中:
- $customField = get_post_custom_values("mood");
- if (isset($customField[0])) {
- echo "Mood: ".$customField[0];
- }
保存文件。好了,當(dāng)您新撰寫一篇文章的時(shí)候,就創(chuàng)建一個(gè)自定義字段,叫做 mood, 然后輸入您當(dāng)前的心情。
代碼解釋:自定義字段方法非常簡單,這個(gè)跟眾所周知的,在首頁的摘要旁顯示您的縮略圖的方法沒有多大區(qū)別。看來僅需要類似 mood 這樣的自定義字段,如果設(shè)置了值,那么就顯示。
4. 給您的文章添加Meta描述符
問題:WordPress, 令人驚訝的是,不使用描述標(biāo)簽的作為meta預(yù)設(shè)值。
當(dāng)然,對(duì)于seo來說,現(xiàn)在的meta標(biāo)簽已經(jīng)沒有以前那么重要了。然而,盡管如此,它們依然可以提高您的博客在搜索引擎中的排名。
如何又是使用自定義字段來創(chuàng)建描述單獨(dú)帖子的meta描述呢?
解決方案:打開文件 header.php。復(fù)制下面的代碼到 <head> 和 </head>標(biāo)簽內(nèi)。
- <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 中廣泛采用的條件式標(biāo)簽來決定哪些用戶會(huì)訪問這個(gè)頁面。
目錄頁,標(biāo)簽頁,存檔頁及站點(diǎn)首頁,使用的都是靜態(tài) meta 描述語。編輯行3,7,9來定義您自己的頁面。這樣,在文章中,代碼會(huì)尋找自定義字段 Metadescription,并將其中的值作為 meta 描述語。
5. 鏈接到外部資源
問題:很多博客們都問過我下面的問題:“我如何直接鏈接到外部來源,而不是創(chuàng)建一個(gè)帖子,僅僅是為了告訴訪客們?cè)趺慈ピL問其他站點(diǎn)。”
這個(gè)問題可以通過自定義字段來實(shí)現(xiàn)。讓我們來看看怎么才能做到這點(diǎn)。
解決方案:首先要做的是打開您的文件 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 并替換輸出的標(biāo)準(zhǔn)代碼…
- <h2><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”Permanent Link to <?php the_title(); ?>”><?php the_title(); ?></a></h2>
… 用新創(chuàng)建的方面 print_post_title() :
- <?php print_post_title() ?>
好了,當(dāng)您需要指向處自己博客之外的文章,僅僅需要滾動(dòng)您的編輯器的下方,創(chuàng)建或者選擇自定義字段 url1 或 title_url 或 url_title ,輸入外部 URL 地址就可以了。
代碼解釋:這是一段非常友好的自定義功能替換 the_title() WordPress 函數(shù)。
基本上而言,這段功能跟老的 the_title() 函數(shù)一樣優(yōu)秀,而且也是一個(gè)自定義字段。如果查找到字段 url1 或 title_url 或 url_title 的值,那么就會(huì)直接鏈接到外部站點(diǎn)而不是博客文章。如果自定義字段值沒有找到,就會(huì)簡單地顯示鏈接本身。
6. 嵌入自定義的CSS樣式
問題:某些文章可以需要額外的 CSS 樣式。當(dāng)然,您也可以選擇 WordPress 的編輯器進(jìn)入html 模式進(jìn)行編輯,加入內(nèi)置的樣式到文章內(nèi)容中。但即使內(nèi)置樣式是有效的,但這總不是最簡單的處理方法。
用自定義字段,我們可以很容易地為個(gè)別文章創(chuàng)建新的 CSS 類,并自動(dòng)加載它們到博客的 header 中。
解決方案:首先,打開文件 header.php ,然后哦插入如下的代碼到 HTML 標(biāo)簽<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>標(biāo)簽
問題:對(duì)于博客,就想其他所有類型的網(wǎng)站一樣,內(nèi)容為王。而SEO對(duì)您的目標(biāo)流量是至關(guān)重要的。wordpress主題的默認(rèn)值是沒有對(duì)標(biāo)簽 <title> 做過優(yōu)化的。
某些插件,如眾所周知的“All in One SEO Pack”重寫了這個(gè),但您依然可以通過自定義字段來解決。
解決方案:打開文件 header.php 并編輯。找到標(biāo)簽 <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 標(biāo)簽,簡單地創(chuàng)建自定義字段 title, 并為它賦值就可以了。
代碼解釋:通過這段代碼,我為各個(gè)類別的帖子,如首頁,分頁,目錄頁及博客文章用不同標(biāo)記模板生成一個(gè)自定義 。
如果當(dāng)前活動(dòng)的頁面是篇博客文章,代碼會(huì)尋找自定義字段 title。如果找到了,就會(huì)顯示自定義字段中的值,反之,顯示標(biāo)準(zhǔn)的 single_post_title() 生成的標(biāo)題。
8. 禁止搜索引擎搜索博客文章
問題:您是否曾想過創(chuàng)建一篇半隱私文章,允許普通讀者訪問,而不是搜索引擎?如果是這樣的話,最簡單的解決方案是…您肯定猜到了!用自定義字段。
解決方案:首先,獲取您不想被搜索引擎索引的文章的ID號(hào)。我們以ID為17的作個(gè)范例。
打開文件 header.php 粘貼下面的代碼到標(biāo)簽 <head>和</head>中:
- <?php $cf = get_post_meta($post->ID, 'noindex', true);
- if (!emptyempty($cf)) {
- echo '<meta name="robots" content="noindex"/>';
- }
- ?>
僅此而已,這對(duì)于您不想將某些信息被搜索引擎索引到的是非常有用的!
代碼解釋:在這個(gè)示例中,我們使用 get_post_meta() 方法來檢索自定義字段 noindex。如果值設(shè)置了,那么添加標(biāo)記 。
9. 用自定義函數(shù)輕松地獲取或者打印自定義字段值
問題:現(xiàn)在我們已經(jīng)展示給了您不少優(yōu)秀地怎么應(yīng)用自定義字段的方法,那么怎樣才能輕松地用自動(dòng)化的函數(shù)來獲取自定義字段值呢?
對(duì)于程序員或者對(duì)PHP比較熟悉的人員來說,獲取自定義值并不是什么困難的事,但對(duì)于非程序員而言卻非常痛苦。通過這個(gè)方法,獲得任何自定義字段值從未如此簡單。
解決方案:將一下代碼方法粘貼到您的主題文件 functions.php 中。如果主題中沒有這個(gè)文件,那么就請(qǐng)創(chuàng)建它。
- 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;
- }
好了,通過下面的代碼來調(diào)用這個(gè)方法就會(huì)獲得自定義字段的值:
- <?php if ( function_exists('get_custom_field_value') ){
- get_custom_field_value('featured_image', true);
- } ?>
代碼解釋:首先,我們使用 PHP 的函數(shù) function_exists() 判斷是否存在 get_custom_field_value 方法是否已經(jīng)在主題中定義過了。如果存在,我們就可以使用。***個(gè)參數(shù)是自定義字段名稱 (這里是, featured_image), 第二個(gè)參數(shù)是允許您直接輸出值 (true) 或者以備作為之后的PHP 使用 (false)。
10.根據(jù)需要隨時(shí)添加Digg按鈕
問題:從眾所周知的 Digg.com 中獲得點(diǎn)擊量的***的方法是將“Digg this”按鈕添加到您的每一篇文章中,瀏覽者可以協(xié)助您成功發(fā)布這篇文章。
但是,對(duì)于您的所有博客都采用這個(gè)按鈕?當(dāng)然不是。例如,如果您撰寫了一條關(guān)于來改善您的網(wǎng)站的聲明,提交到Digg服務(wù),那是毫無價(jià)值的。
解決方案:再次請(qǐng)求自定義字段完成。只要根據(jù)下列的步驟開始就可以了:
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 , 您就可以創(chuàng)建自定義字段 digg 并可以賦任意值。如果賦值,按鈕就會(huì)顯示在文章中。
代碼解釋:這段代碼非常簡單。在自定義代碼上找到自定義字段 digg, 代碼顯示“Digg this” 按鈕。Digg本身提供JavaScript 用戶顯示“Digg this” 按鈕。
【編輯推薦】