プラグイン

の記事

  • 検索結果をソートしたい

    検索結果をソートするには、通常query_posts()で”orderby”を指定する。
    ただし指定できる項目は、投稿テーブル(wp-posts)のフィールドに限られる。
    他の項目(カスタムフィールドや、カテゴリ順など)でソートした場合には、
    フィルターフックでSQLに手を加えるとよい。

    たとえばカテゴリのid順にソートした場合は、
    [sourcecode language=’php’]
    add_filter(‘posts_join’, ‘my_join’);
    add_filter(‘posts_orderby’, ‘my_orderby’);

    function my_join($query){

    global $wpdb;

    if(is_search()){
    $query .= ” JOIN $wpdb->term_relationships AS tr ON tr.object_id=$wpdb->posts.ID JOIN $wpdb->term_taxonomy AS tt ON tt.term_taxonomy_id=tr.term_taxonomy_id JOIN $wpdb->terms AS t ON t.term_id=tt.term_id”;
    }

    return $query;
    }

    function my_orderby($query) {

    global $wpdb;

    if(is_search()){
    $query = ” t.term_id DESC, $wpdb->posts.post_date DESC”;
    }

    return $query;
    }
    [/sourcecode]

    独自に作成したテーブルを追加することも可能だ。ただしやりすぎと負荷がかかるので、様子を見ながら対応すること。

  • ダッシュボードの投稿画面に入力セクションを追加したい

    ダッシュボードの投稿画面に項目を追加するには、カスタムフィールドを利用するのが一般的だ。
    独自の項目がある程度まとまっている場合には、add_meta_box()で入力セクションを追加したほうが、使い勝手がぐっとよくなるだろう。手順としては、ダッシュボードがロードされたタイミングでadmin_menu()をフックし、add_meta_box()を実行することで実装できる。

    [sourcecode language=’php’]
    add_action(‘plugins_loaded’, ‘my_init’);

    function my_init() {

    if(is_admin()) {
    add_action( ‘admin_menu’, ‘my_dashboard’, 1);
    }
    }

    function my_dashboard() {
    add_meta_box(‘my_metabox’, __(‘今日のお天気情報’, ‘my_metabox’), ‘my_section’, ‘post’);

    }

    function my_section() {

    $my_weather = ‘(初期値を設定またはDBから取得)’;
    $my_high = ‘(初期値を設定またはDBから取得)’;
    $my_low = ‘(初期値を設定またはDBから取得)’;

    ?>
    天気:‘ />
    最低気温:ID); ?>
    [/sourcecode]
    デフォルトテーマにはこの記述がある。
    使用中のテーマにこの記述がない場合は、挿入したい箇所にこれを記述すればよい。

  • 定期的に自動処理させる

    WordPressに用意されている擬似CRONのようなものを使って、定期的な自動処理を実行することができる。
    wp_schedule_event()で時間を指定して、独自のアクションフックを発生させる。
    実行のタイミングは、毎時(hourly)か毎日(daily)。

    毎日、午前5時に設定する場合
    [sourcecode language=’php’]
    $timenow = time();
    $year = date(‘Y’, $timenow);
    $month = date(‘n’, $timenow);
    $day = date(‘j’, $timenow);
    $hours = 5;
    $minutes = 0;
    $seconds = 0;
    $schedule = mktime($hours, $minutes, $seconds, $month, $day, $year);
    wp_schedule_event($schedule, ‘daily’, ‘everyday_myevent’);
    [/sourcecode]

    設定した時間になるとeveryday_myeventが発生するので、処理を関連づけておく。
    [sourcecode language=’php’]
    add_action(‘everyday_myevent’, ‘run_myschedule’);

    function run_myschedule() {
    // 処理
    }
    [/sourcecode]

    解除する場合
    [sourcecode language=’php’]
    wp_clear_scheduled_hook(‘everyday_myevent’);
    [/sourcecode]

    状態を取得する場合
    [sourcecode language=’php’]
    if($next_scheduled = wp_next_scheduled(‘everyday_myevent’)){
    $next = date(‘Y-m-d H:i:s’, $next_scheduled);
    }
    [/sourcecode]

  • プラグインを作るには

    プラグインとは、どういうときに何をしたいか?というようなアクションフックへの定義の集まりだ。これを自作するには、/wp_content/plugins/以下にフォルダを用意し、PHPで処理を書いていくことになる。ファイル名は自由で、以下のコメント文がついているファイルがまず実行される。

    [sourcecode language=’php’]
    /*
    Plugin Name: 名称
    Plugin URI: URL
    Description: 説明
    Version: バージョン
    Author: 開発者
    Author URI: 開発者URL
    */
    [/sourcecode]

    ファイルが複数になる場合は、必要に応じてrequireしてもよい。プラグインの作成には、クラスを使用するのが主流のようだ。こうやって誰かが作ったプラグインをダウンロードすると、ソースを見ることができるのはいい。自分のやりたいことに似たプラグインを見つけて改良したり、PHPの勉強にもなるので助かる。

  • ダッシュボードにメニューを追加する

    ダッシュボードにプラグイン専用のメニューを追加することができる。
    使用するアクションフックは、admin_menu
    [ほげ]というメニューを追加して、その配下に[子ほげ]というサブメニューを追加する場合は、以下のようになる。

    [sourcecode language=’php’]
    add_action(‘admin_menu’,’add_mymenu’);

    function add_mymenu(){

    add_menu_page(‘MYMENU’, ‘ほげ’, 0, __FILE__, ‘mymenu’);
    add_submenu_page(__FILE__, ‘MYMENU’, ‘子ほげ’, 0, ‘mychild’, ‘mychild’);
    }

    function mymenu(){
    // mymenuの処理
    }

    function mychild(){
    // mychildの処理
    }
    [/sourcecode]