WordPressショートコードを作ってみる:第二回

【第二回】WordPressの機能を追加するものにショートコードがありますが今回はこのショートコードの作り方を解説します。

【まとめ】

WordPressの記事はwp_postsにあり、

post_typeがpostまたはrevisionのものが対象である。

wp_postsを読むにはMySqlへログインする必要があるが、

global $wpdb;
//だけでログインできてしまうという超簡単仕様。

以上を踏まえてショートコードを書いてみます。

//関数名はpostCountで引数も渡せますので渡せるようにします。
//[POSTCOUNT posts post_content post revision]
//という感じで引数がない場合も作っておきます
function postCount($target){//引数はarrayで受け取る
    if(count($target)==4){//引数が4送られたら
        $table_name= $target[0];
        $count_row = $target[1];
        $target1   = $target[2];
        $target2   = $target[3];
    }else{//4以外ならデフォルト
        $table_name= "posts";
        $count_row = "post_content";
        $target1   = "post";
        $target2   = "revision";
    }
    //DBに接続;インスタンスを呼ぶ
    global $wpdb;
    //tableをSELECT
    $countrow=$wpdb->get_results( "SELECT $count_row FROM $table_name WHERE post_type='$target1' OR post_type='$target2' ",OBJECT);
    //$countrowをカウントしていくつあるか
    return "現在、記事は".count($countrow)."件あります。";
}
add_shortcode('POSTCOUNT','postCount');
//ページに書くコード[POSTCOUT]呼ぶfunctionはpostCount

という感じで追記してみると記事数が得られます。

ヒント!)SELECT $count_row FROM $table_name WHERE post_type=’$target1′ OR post_type=’$target2’はsql命令文です。post_type=’$target1’の変数を”で囲っているのは’’内がstringであるからです。

新しい投稿ページに以下を書き込みます。

[POSTCOUNT wp_posts post_content post revision]

すると以下のように表示されます。

現在、記事は321件あります。

WordPressショートコードを作ってみる:第一回

【第一回】WordPressの機能を追加するものにショートコードがありますが今回はこのショートコードの作り方を解説します。

WordPressの管理画面にrootでログインして「外観」>「テーマの編集」>「テーマのための関数」をセレクトします。

この<?からはじまるページがWordPressで使えるカスタム関数(ショートコードなど)を書き込めるシートになります。

今回はこのシートの最後尾に記事数をカウントするショートコードを追加する手順を解説します。

【手順】

①WordPressの記事はどこに格納されているか調べる

WordPressの記事はMySqlデータベースのwp_postsに格納されています。
またこのDBのレコードのpost_typeがpostまたはrevisionのものが記事で
メディアはattachmentになるようです。

なのでwp_postsをオブジェクトとして読み込んで、
post_typeがpostまたはrevisionのものをカウントすれば記事の数が解ります。

②WordPressのMySqlデータベースにアクセスする方法を知る

WordPressでMySqlにログインするのは簡単です。

global $wpdb;

これだけでMySqlにログインできてしまいます。

関数リファレンス/wpdb Class

が、WordPressから見えるのは

/wordpress/wp-includes/wp-db.php

に記載されている

var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta');

だけです。

と、ここまで解ったらあとはコードを書くだけです。