イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです


このエントリーをはてなブックマークに追加

WordPressでプラグインを作ってみた その3

おひさしぶりです。中村です。

最近暑かったり涼しかったり。。。
体調崩していませんか?
そんな時こそ、モリモリ餃子を食べて元気になりましょう。

先日池袋で食べた餃子がとても美味しかったです。
その名も肉汁餃子!

gyo za nikujiru.jpg

もちろんお土産20個買いました。

今回も次回に引き続きWordPressでプラグイン作ってみた話をします!

wordpress logo.png

おさらい

  • WPに会員登録機能を追加する

  • 会員データは自社サービスのDBへ保存させる

  • 投稿記事をお気に入りに追加でき、一覧でみれるようにする

今回は「お気に入り一覧の作成方法」について詳しく紹介していきます。

お気に入り一覧の作り方

パッと思いついた手法としては

  • テーブルを結合する

  • 記事のループ内で判定させる
    (記事IDを指定してお気に入りでなければ非表示にするとか)

この2点でしたが、

お気に入りページの並び順は追加順(降順)がいいな!

とご要望いただいたので、テーブル結合する方向となりました。

新規テーブルの作成方法

今回は以下のようなtableを追加したいと思います。

Field Type

id

int(11)

post_id

int(11)

user_id

int(11)

created_at

datetime

まずは上記テーブルを作成する関数を作成します。
マイグレーション的なアレです。

/*
  * プラグインを有効化した場合にテーブルを作成する
  */
public function create_favorite_table() {
global $wpdb;

$table_name = $wpdb->prefix . 'favorite';
$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
id int(11) NOT NULL AUTO_INCREMENT,
post_id int(11) NOT NULL,
user_id int(11) NOT NULL,
created_at datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
UNIQUE KEY id (id),
INDEX idx_trend_user_id (trend_user_id)
) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}

ほぼSQLそのまま記述する感じですね。
ちなみに結構インデントなどでハマることも多いそうなのでご注意を。。。

次にプラグインを有効化した場合に実行されるように記述します。

//プラグインを有効化した場合にテーブルを作成する
register_activation_hook( __FILE__, array($this, 'create_favorite_table') );

これでプラグインを有効化するだけで、今回必要なテーブルが自動的に作成することができます。
少しはプラグインっぽい感じですかね!

記事テーブルと結合してみる

いよいよwp_postデータと結合してデータ取得するようにしてみます。

記事データを取ってくる処理を変更する訳にはいかないのですが、
SQLを修正することができるフィルターフックというものがあるのでそちらを利用します。

今回は以下2つを使いました。

  • posts_join_paged(JOINを追加できる)

  • posts_orderby(ORDER BYを追加できる)

まずはテーブルを結合と並び替えの関数を作成し。。。

/*
  * 「お気に入りに追加した投稿記事のみ」の条件を追加する関数
  * (/inc/favorite.php)
  */
public function favorite_posts_join_paged() {
  $join_paged_statement = "INNER JOIN wp_favorite fav ON fav.post_id = wp_posts.ID AND  fav.trend_user_id = " . intval($this->user_id);
  return $join_paged_statement;
}

/*
  * 「お気に入りに追加した投稿記事のみ」の並び順を変更する関数
  * (/inc/favorite.php)
  */
public function favorite_posts_orderby() {
  $orderby_statement = "fav.created_at DESC";
  return $orderby_statement;
}

お気に入りページ(固定ページ:作り方はその1参照)にてフィルターを追加!

add_filter('posts_orderby', array($membership, 'favorite_posts_orderby'));
add_filter('posts_join_paged', array($membership, 'favorite_posts_join_paged'));
it trend labo favorite.png

おお!いい感じです!
その他にもフィルターフックはたくさんあるようなので、機能拡張が簡単にできそうですね。
さすがWordPress!

3回に渡りWordPress情報をお届けしましたが、いかがでしたでしょうか。
今回の内容などは3ヶ月くらい前のことなので既に忘れかけていましたが、何とか書けてホッとしてますw

WordPressプラグイン作成のハードルが少しでも下がれば幸いです。

最後になりますが、今回プラグイン作成〜導入した自社サイトのご紹介です。
お気に入り機能、ぜひ試してみてください!

ITトレンドLabo https://it-trend.jp/labo/

こちらからは以上です!