你是否想像 Nometet.com 這個網站一樣讓每篇部落格文章的背景看起來都不一樣呢?這個網站的設計確實是非常酷的,因為它允許作者透過上傳圖片來自定義文章背景,而且甚至圖片的尺寸也沒有特別的規定。上傳並不困難,只要在 meta 盒裡執行一個上傳軟體就可以了,主要還是在選擇圖片上,讓我們來看看究竟如何實現的呢?

考慮到後面需要用上傳軟體將圖片的 URL 地址儲存到一個自定義欄位裡,所以我們先將自定義欄位建好,這樣一來你只需要將 URL 收到自定義欄位裡並將其顯示為背景即可,程式碼非常簡單:

<?php
$bg = get_post_custom_values("background");
if ( is_array($bg) ) { ?>
<style type="text/css" media="screen">
body{ background: url(<?php echo $bg ?>) fixed no-repeat; }
</style>
<?php } ?>

不過你還得修改圖片尺寸並將 URL 複製到自定義欄位裡。

自定義 meta 上傳軟體

我們需要一個上傳軟體,究竟該如何實現呢?透過對 WooThemes 的研究,我發現他們的主題裡有一個 admin-custom.php 檔案 (在/functions 目錄下),這是他們用來加上傳軟體以及其他自定義 meta 盒的地方。

你可以從這裡下載此檔案。

下載完之後,複製所有程式碼並將其貼上到你的 functions.php 檔案裡 (注意要貼上在結束的?> 標籤之後) 。

接著,需要啟動 meta 盒,可以用下面的程式碼來實現:

$woo_metaboxes = array(
"image" => array (
"name" => "bg",
"label" => "Background",
"type" => "upload",
"desc"      => "Automatically resized/enlarged but at least 1000px x 800px for it to be big enough."
),
);
update_option('woo_custom_template',$woo_metaboxes);

這段程式碼必需新增在其他程式碼之後結束的?> 標籤之前。儲存並上傳檔案,這樣就你就有了上傳軟體,它會將圖片儲存到自定義欄位 『bg』 裡。

調整影像大小

最後需要使用 timthumb 來調整影像的寬度為 1920 畫素,首先下載 TimThumb.php,並將它上傳到你的主題 tools 檔案裡,頭部的程式碼要遵守 timbthumb 的句法:

body{
background: url(<?php bloginfo('template_url'); ?>/tools/timthumb.php?w=1920&zc=1&src=<?php echo $bg; ?>) fixed no-repeat;
}

你會發現使用上面的程式碼是行不通的,因為 timthumb 不喜歡自定義欄位裡的圖片 URL 地址 http://… 。

最後別人告訴我需要將 URL 地址編譯才行,於是把上面的程式碼替換成:

body{
background: url(<?php bloginfo('template_url'); ?>/tools/timthumb.php?w=1920&zc=1&src=<?php echo urlencode($bg); ?>) fixed no-repeat;
}

宣告成功!