hseki

【WP REST API】PHPを一切使わずに投稿一覧を作ってみる


エンジニアの関です。
4月でいよいよ社会人3年目です。最近、時代の流れの速さに怯えています。
私は普段WordPressで開発をしているのですが、よくこんな言葉を耳にします。

「PHPの知識がないからカスタムができない」

WordPressには初心者でも使いやすいようにプラグインやテーマなどを数多く取り揃えているのですが、自由にカスタムしたいとなると、やはりPHPの知識が必要になってきます。
そこで今回は、PHPを一切使わずにWordPressから動的にデータを取得・表示する方法をご紹介したいと思います。

続きを読む


Twitter APIとMeCabで街コンのエゴサーチをした話


社会人2年目エンジニアの関です。

突然ですがリンクバルの主要サービスと言えば・・・そう「街コン」ですね。
日頃街コンジャパンという街コンのサイトを保守・運用しているわけですが、やはり一般ユーザからのサービスへの評価が一番気になるところです。
しかしユーザ一人一人にインタビューするわけにもいかないですし、Twitterとかでエゴサーチをしようにも情報量が多すぎていまいち価値のある評価が良く分からない。
そこで今回は、Twitter APIとMeCabを使って「街コン」に関するツイートの中からより重要な単語・ツイートを分析・発見していきたいと思います。

制作物は以下で公開しています。
APIキーの取得・設定などを事前に行ってください。
https://github.com/hseki-luckey/api-mecab

1. 事前に準備するもの
MeCab
日本語形態素解析エンジン。名前の由来は開発者の好物とのこと。
php-mecab
PHPでMeCabを使うためのモジュール。
(諸々の事情でMAMPで使えるように設定したのですが意外と苦労しました;)
TwistOAuth
Twitter APIでごにょごにょやるためのライブラリ。使い方は超簡単。

2. 収集・分析手法
① Twitter APIを使って街コンに関するツイートをキーワード検索・収集
検索キーワード:街コン(※http、https、拡散、RTを除外)

② TF-IDF法により各単語、各ツイートの重み(重要度)を計算
TF-IDF法についてはこことか参照してみてください。
詳しい理論などは省きますが、要はオリジナリティって大事だよね☆ってことです。
※ README.mdにも書いたのですが、意味の無い文字列を弾くために今回はツイートから一部を除く記号とアカウント名を排除しています。

③ ②の結果をもとに重要な単語・ツイートを分析・発見
スクリプト実行により自動生成される以下の3つのCSVを使っていきます。
◆ data.csv
Twitter APIにより取得したデータを格納。
最大5000件取得可能(今回の場合は4376件取得)。

◆ tfidf_avg.csv
各単語の平均TF-IDF値を格納。

◆ tfidf_list.csv
各ツイートのTF-IDFの合計値を格納。data.csvと対応。

3. TF-IDF値が上位だった単語
◆ 荒らし
今回TF-IDF値が最も高かった単語。
ちなみに「街コン 参加」だと「怒り」という単語が3位に来ており、マイナスな単語も上位にそこそこ見受けられました。良い意見より悪い意見の方が重要度が高い、ということでしょうか。

◆ さがそ
「街コンさがそ」というツイートから。
街コンをお探しの際はぜひ街コンジャパンのご利用を。素敵なイベントが見つかるはずです。

◆ ジュン
街コンに行く報告をした友人(ジュンくん)に反応した模様。

◆ めんど
人それぞれのめんどくさいと思うポイントが書かれていました。
「申し込んだものの行くのが…」か「出会ったはいいもののその後のお付き合いが…」の2つが多かったかと。

◆ 相殺
「街コン相殺拳」という何やら強そうなツイートから。
どんな必殺技か非常に気になります。

4. おわりに
やはり意外な単語ほど上位にランクインするようです。
逆に「出会い」「パーティー」「開催」「合コン」「友達」などの街コンと掛け合わせてよく使われる単語は、軒並み下位になっていました。
TF-IDF法自体はアンケート結果の分析などにも有効なので、機会があったら使ってみるといいのでは。
最後に。今回TF-IDFの合計値が最も高かったツイートから。

街コンで出会った人と上手くいくといいな

ぜひ皆様、一度街コンに参加してみてください。

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆

株式会社リンクバルでは一緒に働くエンジニアを募集中です!
気になった方はコチラまで!

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆


【WordPress】投稿を集計するただひとつのプラグイン「Site Posts Stats」


社会人2年目エンジニアの関です。

WordPressの開発で、テーマとかプラグインを自作しているとなんだか上級者っぽい感じしませんか?かっこよくないですか?
ということで、私もかっこいい上級者に一歩でも近づきたいのでプラグインを自作してみました。

今回の制作物は以下で公開しています。
概要や画面説明などはREADME.mdを見てください。
https://github.com/hseki-luckey/site-posts-stats

1. 開発に必要なもの
テーマユニットデータ
集計するにはそこそこの投稿数が必要。でも、ちまちま1記事ずつ準備するのもなぁ・・・。と思っていたらちょうどいいのがありました。
簡単なインポートだけで投稿だけでなくカテゴリやタグ、ユーザなども追加できます。超助かります。

Chart.js
グラフを表示するためのライブラリ。今回の主役と言っても過言ではない。
このプラグインでは円グラフ、棒グラフ、折れ線グラフの3種類しか使っていませんが、他にもレーダーチャートやドーナツグラフなど、グラフの種類が充実している地味な優れものです。
ダウンロードしてもよかったのですが、めんどくさかった諸々の事情により外部リンクで読み込んでいます。個人的にアニメーションが好き。

2. 導入方法
① githubからソースをダウンロードし、/wp-content/plugins内にフォルダを設置する

② wp-admin内「インストール済みプラグイン」から「Site Posts Stats」を有効化する

③有効化すると左枠メニューバーに「投稿集計」というメニューが表示される

3. 画面デモ
以下、実際に表示されるグラフです。
女子っぽくグラフの色はピンクで統一してみました。

① 年別投稿数

初期値には「post_date_gmt」が「0000-00-00 00:00:00」になっている投稿が設定されます。(ステータスはおそらく「draft」「 auto-draft」だと思います。)
地味に投稿数0件の表示が大変でした。

②ステータス別投稿数

集計対象となる投稿のpost_typeを「post」と「page」に区切っているため、対象ステータスは「inherit」以外です。
③もなのが9種以上サイト内に投稿ステータスが存在すると対応する色が存在しないのでエラーが起きます。WordPressデフォルトは8種類なので、普通に使う分には問題ないかと。

③投稿タイプ別投稿数

②でも説明しましたが、対象の投稿タイプを9種類以上にするとエラーが起きます。
現在は「post」と「page」に絞っていますが、集計範囲を広げる場合には十分注意してください。

④著者別投稿数

10件以上グラフに表示させるとラベルの文字が小さくなりすぎて何が何だか分からなくなるので、グラフの表示数だけは10件に絞っています。

⑤カテゴリ別投稿数

④と同じくグラフの表示を10件に絞っています。

4. おわりに
今回のプラグイン制作期間はおよそ10時間。
phpやsqlというよりもjsやcssに手間取ってしまいました。行き当たりばったりで画面構成を決めてしまったのと、関数の作り方が雑だったのが反省点です。
まだまだWordPress上級者にはほど遠いので、また違うプラグインを作ってみたいと思います。

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆

株式会社リンクバルでは一緒に働くエンジニアを募集中です!
気になった方はコチラまで!

☆.。:・★.。:・☆.。:☆.。:・★.。:・☆.。:・★.。:・☆☆.。:・★.。:・☆.。:☆.。:・★.。:*・☆☆


【WordPress】プラグインがサイトを危険に晒す4つの方法


こんにちは!社会人2年目エンジニアの関です!

WordPressを利用する上で、プラグインはなくてはならないものです。
しかし間違った運用を続けていると、時にサイトを大破させる凶器にもなります。
今回は、突然の大事故を避けるためのプラグインの正しい導入・運用方法について紹介していきたいと思います。

1. 実績のないプラグインを導入する
WordPressには実に多くのプラグインが用意されています。そのため、中には粗悪なプラグインも紛れ込んでしまっているのも確かです。
プラグインの導入は良くも悪くもサイトに大きな影響を与えるため、慎重に選んでいきたいところです。

とりあえず「/)( ◕ ‿‿ ◕ )(\ わけがわからないよ」という方は、プラグインのダウンロードページで以下の3点に注意して選んでみてはいかがでしょうか。

  1. 最終更新日
    個人が作られているものも多いので、気づいたら1年以上前に更新が止まっていた、なんてことも。
  2. 有効化済みインストール数・評価
    何かしらの理由がない限りより多くのインストール数、より良い評価を集めているプラグインを選ぶべきだと思います。
    またインストール数が多いということは使っている人も多いため、ggるときに情報を集めやすくなる利点もあります。
  3. WordPressとの互換性
    あのバージョンでは動くけど、このバージョンでは動かないということがあります。
    プラグインの最新版が自分の環境のWordPressと互換性があるか、導入後に後悔しないためにもきちんと確認しましょう。

banners_and_alerts_%e3%81%a8_custom_post_type_ui_-_wordpress_plugins

とにかく言えるのは「とりあえずggれ」ということだけです。

2. 不用意にプラグインをインストールする
いくら便利なものでも使わないなら不要なものです。
プラグインの入れ過ぎは、サイトが異常に遅くなったり、セキュリティホールを作ってしまったりする原因になります。

インストールしているプラグインを定期的に見直し、必要に応じて削除するなり、入れ替えをするなりすることをオススメします。
また、プラグインを入れずに独自で実装できないかについても検討してみましょう。

3. バージョンが古いプラグインを使い続ける
「アップデートしたら動かなくなるかもしれない。」
「今正常に動いているからいいじゃん。」
気持ちは分かりますが、それを長く続けていくとどこかで事故る可能性が大いに出てきます。

WordPressを最新版にアップデートしたらプラグインが動かなくなり、慌てて最新のバージョンにプラグインをアップデートしたらサイトが壊れたorz
・・・なんてことになったら、まさに地獄の始まりです。

また、プラグインのリリースノートを見るとセキュリティfixのものも散見されるので、セキュリティ的にも小まめなアップデートをオススメします。

プラグインが最新か確認する方法

  1. プラグイン>インストール済みのプラグイン(/wp-admin/plugins.php)にアクセス
  2. 全プラグインが最新版になっているか確認

※最新でない場合下記のように「新バージョンの○○が利用できます」という黄色い表記が出てきます。その場合は「更新」を押して該当プラグインを最新版にアップデートしてください。

%e3%83%95%e3%82%9a%e3%83%a9%e3%82%af%e3%82%99%e3%82%a4%e3%83%b3__test01_-_wordpress_%f0%9f%94%8a

4. プラグイン自体に手を入れる
上記の「3.バージョンが古いプラグインを使い続ける」をついつい行ってしまう主な理由だと思います。
WordPressには様々なプラグインが用意されていますが、自分の求めている仕様に合致するプラグインが無く、似た仕様のプラグインをカスタムしなければならないときが出てくるかもしれません。
しかし、だからといってプラグインのソースコード自体に手を入れてしまうのはNGです。

プラグインはアップデートするとファイルの中身がごっそり入れ替わってしまうため、それに伴い、いくらソースコードを頑張ってカスタムしていたとしても容赦無く全部消えてしまいます
(同じ理由でWordPressのコアファイル(/wp-content以外のファイル)に手を入れるのはオススメしません。)

どうしてもプラグイン(コアファイル)をカスタムしたい場合は、WordPressデフォルトで用意されている「add_filter」などの関数を使ってカスタムしていきましょう。
この関数を使えば、プラグイン(コアファイル)内の該当関数にフックをかけて自由に動かすことができます。

おわりに
ここまでプラグインの安全な導入・運用方法をご紹介してきましたが、結局のところ日頃の小さな積み重ねが突然の大事故を防いでくれると思います。
そのためにも定期的な情報収集、運用方法の見直しを行うことをオススメします。

それでは、よいWordPressライフを!

☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆.。:・★.。:*・☆☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆☆

株式会社リンクバルでは一緒に働くエンジニアを募集中です!
気になった方はコチラまで!

☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆.。:・★.。:*・☆☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆☆


【WordPress】固定ページで親子関係を探る


こんにちは!社会人2年目エンジニアの関です!
先日WordPressの開発を行っていたとき、私はあることに気づきました。

「固定ページには親子関係を判定するための関数がない・・・だと・・・!」

そう。私の大好きな「cat_is_ancestor_of」のような関数が、固定ページの場合だとWordPressデフォルトで備わっていなかったのです。
そこで今回は、固定ページの親子関係を判定するための関数を作っていきたいと思います。

固定ページでの親子関係の作り方
WordPressデフォルトの機能として、以前ご紹介したカテゴリー同士での親子関係付けの他に、固定ページでの親子関係付けを行う機能も備わっています。
設定方法はカテゴリのときと同じく、とっても簡単な2ステップのみです。

①子にしたい固定ページの編集画面にアクセスする
②ページ属性>親の入力欄で親にしたい固定ページのタイトルを指定、保存して完了!
※親として選択できる固定ページは「公開中」のもののみです。親子関係付けを行う前に必ず親ページの公開を行ってください。
※カテゴリーのときと同じく、固定ページのURLも階層関係に応じて「親/子/孫/ひ孫/・・・」の形式に変化します。

%e5%9b%ba%e5%ae%9a%e3%83%98%e3%82%9a%e3%83%bc%e3%82%b7%e3%82%99%e3%82%92%e7%b7%a8%e9%9b%86__test01_-_wordpress

親子関係に応じて入力欄の表示や一覧ページの表示が変化するのもなかなか憎いです。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88_2016-11-25_9_39_44  

%e5%9b%ba%e5%ae%9a%e3%83%98%e3%82%9a%e3%83%bc%e3%82%b7%e3%82%99__test01_-_wordpress

詳しくは以下の記事をご参照ください。
固定ページの階層化/AdminWeb

親子関係を判定してみる
固定ページに親子関係を付けたところで、実際に親子関係を判定するための関数を実装してみます。

今回目指す仕様は以下の3点です。
①現在表示している固定ページは、指定した固定ページの子孫か否かを判定
②「cat_is_ancestor_of」のようにどんなに関係が離れた子孫(親とひ孫など)でも判定させる
③ページID指定だと開発している環境によって変わってしまう可能性があるのでslug指定

function page_is_ancestor_of($slug){
  // 現在表示しているページ情報を取得
  // get_the_ID()で紹介しているところも多いですが、これでも取得できます
  global $post;
  // 親か判別したい固定ページのslugからページ情報を取得
  $page = get_page_by_path($slug);
  $result = false;
  if(isset($page)){
    // $post->ancestorsで先祖を全て取得した配列(ID配列)を繰り返し処理
    foreach ($post->ancestors as $ancestor) {
      // 表示しているページのIDが含まれていればtrueを返す
      if($ancestor == $page->ID){ $result = true; }
    }
  }
  return $result;
}

これを使って、固定ページ「parent」を先祖に持つか否かを判定させてみると、

// 「parent/children/grandson/great_grandson」のページ
page_is_ancestor_of('parent');
#=> true

// 「sample/other」のページ
page_is_ancestor_of('parent');
#=> false

slug指定するなら親ページのslugと子ページのslugの前方一致でもいいんじゃあ・・・という気がしないでもないですが、とりあえずこれで固定ページの親子関係を判定するための関数ができました。
関連する固定ページの場合にのみ表示させたい項目があるときや、サイドバー・ヘッダー・フッターの出し分けなど、そこそこ必要な場面があると思います。

今回ご紹介した方法はほんの一例なので、他にいい方法をご存知でしたら教えてください。

☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆.。:・★.。:*・☆☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆☆

株式会社リンクバルでは一緒に働くエンジニアを募集中です!
気になった方はコチラまで!

☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆.。:・★.。:*・☆☆.。:・★.。:*・☆.。:*☆.。:*・★.。:*・☆☆