[WordPress] 新增後台頁面

WordPress 不只可以當 Blog,也可以架設成其他類型的網站 (例如報名網站)

有時候想要替自己的網站加一些特殊的功能,而找不到外掛可以來頂替時,就要自己動手做了

而直接做在後台裡是一個不錯的選擇,以下為在後台開新頁面並將頁面放在左側管理選單

先在 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 or 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');

頁面內容寫在 wp-content/themes/sample_theme/custom_page.php

echo "This is custom page.";
/*
do something
*/

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

而頁面權限等級的部分,可以參考 WordPress Codex :: User Levels

另外一個是加入子選單的部分,用法也是大同小異:WordPress Codex :: add_submenu_page

值得注意的是若要加入自訂頁面至預設功能選單要用到子函式,例如要在 options-general 加入子選單要使用 add_options_page() 來新增。

Leave a comment

[WordPress] WP Page Numbers 外掛設定

WP Page Numbers是個不錯的外掛,套用的步驟也很簡單,詳見外掛介紹
http://wordpress.org/plugins/wp-page-numbers/

不過要在自己的網站上開新頁面做一些特殊用途,又需要用到換頁功能
但是新頁面又和文章不相關時,外掛便不會運作
不過使用一點小方法便可解決這問題

$rows = 200; // 資料筆數
$display_rows = 20; // 每頁顯示20筆資料

// 宣告全域變數
global $max_page; // 最大頁數
$max_page = $rows / $display_rows; // 計算總頁數,並存到$max_page這個變數

// 若沒有使用固定網址時則需要再加入下列兩行
global $paged;
$paged = $_GET['paged'];

// 如果有設定固定網址,可用這種方式取得當前頁碼
$get_currentPage = $wp_query->query_vars['paged'];

 

這樣就可以正常運作了

Leave a comment

[PHP] PHP 5.4 的 session 寫法變革

前陣子把 PHP 升級到5.4後
發現有用到session的程式都爆了

Fatal error: Call to undefined function session_register()

 

google一下
原來是PHP 5.4的session寫法有改變
PHP 5.4 移除了 session_is_registered()  、 session_register()  與 session_unregister()  三支function。
Session 的操作更簡化了一些。

//判斷 Session 是否存在
if( isset($_SESSION['foo']) ) {
    echo 'session is exist';
}

//註冊 Session
$_SESSION['foo'] = 'bar';

//移除 Session
unset($_SESSION['foo']);

 

這樣操作其實更直覺,也不需要額外多記函式(個人很健忘),這三支函式早該移除了。
但是大大小小的舊系統改起來也是不少麻煩
所以另一個做法就是把移除的function在script執行前先定義好:

<?php
if ( !function_exists('session_register') ) {
    function session_register() {
        $args = func_get_args();
        foreach ($args as $key) {
            $_SESSION[ $key ] = $GLOBALS[ $key ];
        }
    }
}

if ( !function_exists('session_is_registered') ) {
    function session_is_registered( $key ) {
        return isset( $_SESSION[ $key ] );
    }
}

if ( !function_exists('session_unregister') ) {
    function session_unregister( $key ){
        unset( $_SESSION[ $key ] );
    }
}

 

這樣就可以相容舊系統了
不過還是比較建議移除舊寫法囉
Reference:http://blog.wu-boy.com/2012/06/what-has-changed-in-php-5-4-x/

One Comment