[WordPress] 解決不支援utf-8環境下中文檔名異常問題

修改 wp-admin/includes/file.php

// 找到這行程式碼(約在306行),並加入iconv
$new_file = $uploads['path'] . "/$filename";
$new_file = iconv('utf-8', 'big5//ignore', $new_file);
// 把這行註解掉(約在322行),以下列程式碼取代
// return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' );
return apply_filters( 'wp_handle_upload', array( 'file' => $uploads['path']."/$filename", 'url' => $url, 'type' => $type ), 'upload' );

 

修改 wp-admin/includes/media.php

// 把這行註解掉(約在2334行),以下列程式碼取代
// $filename = esc_html( basename( $post->guid ) );
$filename = substr($post->guid, strrpos($post->guid,'/')+1);

 

存檔後即生效

 

參考自 http://www.xyduan.net/

[WordPress] qTranslate enable at WordPress 3.7.1

最近WordPress更新了3.7.1
更新後發現qTranslate出現版本不相融情況
要使用plugin的功能要手動去啟用
不過預設還是disable
外掛作者也還沒更新對應3.7.1的版本
懶得每次發文要點一次enable
索性直接先改支援版本

define('QT_SUPPORTED_WP_VERSION', '3.7.1');

利用這種方式強制enable也沒有發生衝突
在作者release新版本前就先暫時這樣頂替吧

[Ubuntu] 於指令列顯示 screen 的視窗編號

編輯 ~/.bashrc 這支檔案,並看到這一段(約在56~60行)

if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

 

這段是判斷有無開啟彩色 Terminal 顯示模式

第二行為預設的顯示設定,顯示的樣子大概像這樣

 

要顯示視窗則改成下列內容

if [ "$color_prompt" = yes ]; then
if [ "$WINDOW" = "" ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;35m\][W$WINDOW]\[\033[00m\]\$ '
fi
else

 

在彩色 Terminal 顯示模式裡面再加一個判斷 GNU Screen 是否啟用,沒有的話顯示預設樣式,有的話則顯示成有加入視窗編號的樣式

簡單說明一下 PS1 修改的內容區分為兩部分

\[\033[01;35m\] 這段是宣告文字顏色(這裡用亮紫色當示範)

[W$WINDOW] 圖片中顯示 [W6]$WINDOW 這個變數是視窗編號

 

修改儲存後輸入 screen 指令開新視窗後顯示的樣子就像這樣

 

完成收工!

[PHP] IE下載檔案無法辨識檔名與檔案類型

今天碰到網站利用IE下載檔案時發生無法辨識檔名與檔案類型

花了一點時間找問題來源,原來是IE讀 http header 讀到uft-8的編碼時會有問題

只好針對IE多寫一個判斷,讓程式偵測到瀏覽器為IE時把檔名轉碼

function dl_file( $file ){
    if ( file_exists($file) ) {
        $filename = basename($file);
    }

    // 若為IE瀏覽器則將檔名編碼轉換成Big5
    if ( strpos( $_SERVER['HTTP_USER_AGENT'], "MSIE" ) ) {
        $filename = iconv('utf-8', 'big5', $filename);
    }

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$filename);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: '.filesize($file) );
    ob_clean();
    flush();
    readfile($file);
    exit;
} else {
    echo "Error: File not found.";
    return false;
}

IE啊IE,ˊ_>ˋ………

[WordPress] 新增後台頁面

WordPress不只可以當Blog,也可以架設成其他類型的網站(Ex:報名網站)
有時候想要替自己的網站加一些特殊的功能,而找不到外掛可以來頂替時,就要自己動手做了
而直接做在後台裡是一個不錯的選擇,以下為在後台開新頁面並將頁面放在左側管理選單
先在theme_option.php裡面加入一些內容

// Path: wordpress/wp-content/themes/sample_theme/functions/theme_options.php
// 註冊頁面
// 功能表名稱與頁面title設成"自訂頁面",權限等級設為2 (即身分為作者以上的使用者都能看到這個頁面),page為my_custom_page,callback為load_custom_page
function add_menu_custom_page() {
    add_menu_page('自訂頁面', '自訂頁面', 2, 'my_custom_page', 'load_custom_page');
}

// 設定要載入的script、css
function custom_page_init() {
    if ( isset($_GET['page']) && $_GET['page'] == 'my_custom_page' ) {
        wp_enqueue_style("jquery-ui_layout_1.10.3", "http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css");
        wp_enqueue_style("style", THEME_CSS."/custom_page.css", false, "1.0", "all");
        wp_enqueue_script("jquery_1.9.1", "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js");
        wp_enqueue_script("jquery-ui_core_1.10.3", "http://code.jquery.com/ui/1.10.3/jquery-ui.js");
    }
}

// 讀取頁面模版(在此將模版檔案寫在另一支檔案裡)
function load_custom_page() {
    include ('../custom_page.php');
}

// 將前面的function載入wordpress的核心執行項目中
add_action('admin_init', 'custom_page_init');
add_action('admin_menu', 'add_menu_custom_page');

 

頁面內容寫在custom_page.php裡

// Path: wordpress/wp-content/themes/sample_theme/custom_page.php
echo "This is custom page.";
/*
do somethings
*/

 

關於前面所用到的WordPress function完整說明可參考官方文件:
add_menu_page
add_action
wp_enqueue_style
wp_enqueue_script

 

而頁面權限等級的部分,可以參考 WordPress Codex :: User Levels
另外一個是加入子選單的部分,用法也是大同小異:WordPress Codex :: add_submenu_page
※值得注意的是若要加入自訂頁面至預設功能選單要用到子函式,例如要在options-general加入子選單要使用add_options_page()來新增。