漆黒な技術メモ

管理人が必要に応じて自分のメモを好き勝手に投下するたまり場的ブログ

【更新】記事カテゴリの自動更新とかいう頭おかしいことをやってみる(その2)

【4/26更新】ソースコードを貼り付け

ありえないぐらい久々の更新なのだが、途中で終わるのも何なのでとりあえず続きを書いてみる。

前回は「カスタムフィールドの値が今日と一緒の日付だった記事idを取り出す」的なことをした。

今回は「自動更新前と自動更新後に使うカテゴリのidを取り出す」ということをやる。


今回自分が使うカテゴリは二つ。

  • 開催予定のイベント
  • 過去のイベント

見てもらえばわかると思うが、上が更新前のカテゴリ、下が更新後のカテゴリである。

普通idを取り出す場合だったら「カテゴリ名が入っているテーブルから、上記二つのカテゴリ名で検索して引っかかったidが答え」というくそ単純な話で終わるのだが、WordPressではそうもいかない。
それはなぜかというと、WordPressのDB構造にある。

WordPressのDB構造

これを見ていただこう。
f:id:igbt3116redtrain:20141027043420p:plain
(http://wpdocs.sourceforge.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0より抜粋して引用)

テーブルがやたら多い。
一応各テーブルについてざっくり説明を

  1. wp_posts…投稿データそのものが入ってるテーブル
  2. wp_term_relationships…投稿データとタクシノミーを関連付けるテーブル
  3. wp_term_taxnomy…各タクシノミーと語句を関連付けるテーブル
  4. wp_terms…タクシノミーで使用する語句を格納しておくテーブル

まず、「タクシノミー」とはカテゴリやタグなど、記事を分類するための概念をひっくるめて言うものらしい。
なのでWordPressではwp_terms内にカテゴリの語句もタグの語句もひっくるめて格納される。この際に同じ語句であればカラムを一つ増やす必要がなくなるため、このような構造が採用されていると思われる。

そのため、実際に記事と各タクシノミーを関連づけてるのは wp_term_relationshipsテーブルということがわかる。
ということは、「自動更新前と自動更新後に使うカテゴリのidを取り出す」ということを行いたい場合は、

  1. wp_termsテーブルからカテゴリ名が一致するterm_idを取り出す
  2. wp_term_taxnomyテーブルからterm_idが一致し、かつtaxonomyが"category"のterm_taxonomy_idを取り出す

という複雑な手順を踏まなければならない。
これをSQL(文を記述したwordpress向けPHP)になおすと…

<?php
//開催予定のイベント のterm_idを取得し、それに紐付けされたterm_taxonomy_idを取得する
$sql=$wpdb->prepare('SELECT * FROM '.$table_prefix.'terms WHERE slug=%s','future_event');
$future_id_temp=$wpdb->get_results($sql);
$sql=$wpdb->prepare('SELECT * FROM '.$table_prefix.'term_taxonomy WHERE term_id=%d AND taxonomy=%s',$future_id_temp[0]->term_id,'category');
$future_id=$wpdb->get_results($sql);
?>

これであとはいよいよ更新するだけ…なのだが、これにも1手間必要である。
それはまた次回へ続く(本当に書くのだろうか…)

某社の学内会社説明会に行ってきた

管理人の研究室やそのお隣の研究室は、おそらく一般の方々から見たら「すげえ」と思うような会社に行った卒業生の方たちが結構多い(管理人もそうなりたいがなれる気がしない)。
そういう関係で、研究室OBの方々がちょこちょこ会社説明会を開いてくれる。

というわけで、今日は某SIer企業の研究職の方々がお話をしてくださった。
最初はごく普通の会社説明会だったのだが、特にこの会社説明会で選考の何かが決まるというわけでもなかったので、途中の座談会からかなりぶっちゃけた話になった。

内容はというと

  • 企業での研究≒特許を書くこと。
  • 日本の大手企業はやはりスピードが遅い
  • 研究と言っても半分弱は事業化研究。つまるところ開発で、アカデミックな研究はあまりしない
  • システムエンジニアはエンジニアリングする仕事ではない。システムインテグレータはインテグレートする仕事ではない。
  • 大手企業はこれから全部衰退していくのではないか。
  • 車をはじめとした手で動かす嗜好品はだんだんコンピュータにとってかわられる
  • そっけない世の中になっていくけれどもビジネスチャンスは身近になっていく、そういう意味では面白い世の中になるかも

まあ日本企業の事実、SEの事実は想像通りっちゃ想像どおりだった。
それよりも、数年後はお金儲けしか面白いことがなくなるとか、めちゃめちゃな世の中に進んでいきまく感じがすごいする。別にお金を儲けるのを趣味として生きたくない。僕は。

記事カテゴリの自動更新とかいう頭おかしいことをやってみる(その1)

某用事でwordpressを使ってサイト制作をしているわけですが、設計上
「記事カテゴリを設定した日付になったら別の記事カテゴリに変更する」
というトンデモ仕様を組み込まなきゃいけなくなったので、メモ。

wordpress素人がこんな謎な行為していいのか…

さて、今回は記事の中身を「いじっていく」ので
WordPressのテンプレートファイルとかいうPHPファイルをいじるわけではなく、DBをいじることになる。

やりたいこと

f:id:igbt3116redtrain:20141005034330p:plain

対象記事にはこんな感じのカスタムフィールドが入っているので

「カスタムフィールドの値が今日と一緒の日付だったら、その記事のカテゴリを変更する。」

というプログラムを作ればいいことになる。

WordPressDBへのPHPからのアクセス

そもそも今回作るようなプログラムはテンプレートファイルでないので、単純にwordpressのwpdbクラスは使えない。
そこで、WordPressのデータベースに素のPHPからアクセスする方法 | com4tis Blogを見ると、wp-load.phpをインクルードすることで解決できるらしい。

これを基に、とりあえず「カスタムフィールドの値が今日と一緒の日付だったら」のみやってみた。

<?php
//wpdbクラスのインクルード
require_once('wp/wp-load.php');
global $wpdb;

//日付を取得
$searchDate=date('n/j');

//SQL文の定義、インジェクション対策
$sql=$wpdb->prepare('SELECT * FROM wp_postmeta WHERE meta_key=%s AND meta_value=%s','応募締切',$searchDate);
//SQLの実行、結果取得
$results=$wpdb->get_results($sql);

//結果からidを取り出し、そのカテゴリを更新
/*
*	まだ書けてない・・・
*/

?>

ただ、カテゴリはデータベース構造のかなり奥深くにはいつぁれていて、SQL文がすごく複雑になりそう
そのため次回へ持越し…今日は疲れた。

さくらレンタルサーバでwordpress用のCRONを設定してみる。(前座編)

さくらレンタルサーバではご親切に、

f:id:igbt3116redtrain:20140930015109p:plain

こんなGUIっぽくなってる。

 

さあ、どうすればいいのやら、

そもそもCRONなど使ったことがないわたくしにはどーしろと…

 

(ちなみにCRONはこんなものっぽい…http://ja.wikipedia.org/wiki/Crontab)

 

で、実際のコマンドでは

 

45 04 * * * /var/test/cron.autoexec.sh

 

こんな感じにすれば、「毎日4:45に/var/test/cron.autoexec.shを実行する」って言うことが指定できるらしい

 

これをさくらの設定画面に移すと…

 

f:id:igbt3116redtrain:20140930020527p:plain

(毎日実行する場合)

 

こんな感じになるのか?

 

まあ、そもそも実行するスクリプトを作っていないので、どう考えてもそっちが先決だな…

はじめまして

どーも、管理人です。

 

この度は、「自分のメモとして使えればいいなー」ってスタンスでブログを立ち上げました。

 

読者とかいない体で書いていくかもしれませんのであしからず・・・

 

また自分のプロフィールとかは、気が向いたら書きます。

 

では、よろしくお願いします。