以前、advanced custom fieldsプラグインでプレビューもやりたいという記事を書きましたが、最新版ではプレビューにも対応していました。
プラグインをアップデートしたら、以前の記事に書いたプレビュー対応の部分でエラーがでたため、一旦外したところ、外した後もプレビューできていました。これからは、プラグインを有効化するだけで、プレビューにも対応可能ですね。
手間が減るって嬉しいことです。中身がどう変わったのかも、見てみようと思います。
以前、advanced custom fieldsプラグインでプレビューもやりたいという記事を書きましたが、最新版ではプレビューにも対応していました。
プラグインをアップデートしたら、以前の記事に書いたプレビュー対応の部分でエラーがでたため、一旦外したところ、外した後もプレビューできていました。これからは、プラグインを有効化するだけで、プレビューにも対応可能ですね。
手間が減るって嬉しいことです。中身がどう変わったのかも、見てみようと思います。
wordpressをカスタマイズするときに、よく使うプラグインが「advanced custom fields」です。
http://komodo.arrow.jp/wp/614
通常だと、タイトル・カテゴリ・タグ・本文・抜粋を入力するwordpressですが、
全部の投稿に画像を複数付けたいとか、画像と1行文をセットにするとか、
そんな要望がでてくることも多々あると思います。
そういうときに便利なのか「advanced custom fileds」です。
wordpressの記事入力画面の入力項目を好きなように作れます。
ただ、1つ不便だなと思うところがあります。
このプラグインは、wordpressのcustom filedを使って実現されているんですが、
custom filedに入力したデータは、プレビュー機能で見れないんですよね。
公開されている記事を編集する場合は、公開済の情報が表示されてしまいます。
せっかく、データを入力しやすいようにカスタマイズしても、プレビューでできないのは残念。
そこで、「advanced custom fields」で入力した情報を、プレビューできるようにしました。
テンプレートのfunctions.phpに以下を書けば、OKです。
// カスタムフィールドをプレビュー対象にする
// preview用に保存された下書き情報(post)のIDを取得する
function get_preview_id($postId)
{
global $post;
$previewId = 0;
if (($post->ID == $postId) && $_GET['preview'] == true && ($postId == url_to_postid($_SERVER['REQUEST_URI']))) {
// プレビュー表示の際に、自動保存されたpostの下書き情報を取得する
$preview = wp_get_post_autosave($postId);
if ($preview != false) { $previewId = $preview->ID; }
}
return $previewId;
}
function get_preview_postmeta($metaValue, $postId, $metaKey, $single)
{
// プレビュー表示のときにmeta情報(custom fileds情報)を、
// プレビュー用のmeta情報に置き換える
if ($previewId = get_preview_id($postId)) {
if ($postId != $previewId) {
$metaValue = get_post_meta($previewId, $metaKey, $single);
}
}
return $metaValue;
}
add_filter('get_post_metadata', 'get_preview_postmeta', 10, 4);
// 下書き情報を作成するときに、対応するcustom filed情報も作成する
// プレビューの際には、この時作ったcustom filed情報を読み出す
// (読み出しているのが、get_preview_postmetaの部分)
function save_preview_postmeta($postId)
{
global $wpdb, $acf; // $acfがadvanced custom filedsのglobal 変数
if (wp_is_post_revision($postId)) {
if (count($_POST['fields']) != 0) {
foreach ($_POST['fields'] as $key => $value) {
$field = $acf->get_acf_field($key);
if (count(get_metadata('post', $postId, $field['name'], $value)) != 0) {
update_metadata('post', $postId, $field['name'], $value);
update_metadata('post', $postId, "_" . $field['name'], $field['key']);
} else {
add_metadata('post', $postId, $field['name'], $value);
add_metadata('post', $postId, "_" . $field['name'], $field['key']);
}
}
}
do_action('save_preview_postmeta', $postId);
}
}
add_action('wp_insert_post', 'save_preview_postmeta');
調べるのに時間かかったので、忘備録として。
このプログラムは、こちらの記事を参考に、advanced custom filedsに対応させて頂きました。
http://www.warna.info/archives/2502/
※追記(2013/7/16)
最新版のプラグインはプレビューに対応しています。
現在は、上記の対応は入れる必要はありません。
redmineをぼちぼち触っていっています。
チケット等を更新した際に、メールが送信されるように設定しようとしたところ、送信時に失敗します。なぜ!設定時に記述した内容は、以下です。
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: “localhost”
port: 25
domain: “localhost”
検索してでてきた設定方法と上記を見比べても、悪いところはなかったので、他の原因を探ることに。getaddrinfo: Name or service not known”という発生したエラーで検索したら、出てきました、答えが。
“proction:”っていうパートが、設定ファイルの末尾にあって、上書きされているという結果でした。なんで、例でコメントアウトしてる行があるのに、更に何も書いてない”production:”の部分があるのか意図が読めないですが、これで解決。このサイトに助けられました。
会社で、好きなの入れていいから、チケット管理をできる環境を作りたいという話がでてきたので、rubyを勉強する口実にもなると考え、redmineを選びました。ちょうど、4/16に1.4系がリリースされたので、タイミングもよかったです。
インストールは、以下の記事の通りにやったら、すんなりいきました。
http://blog.redmine.jp/articles/redmine-1_4-installation_centos/
メールサーバ設定を行う、configuration.ymlでは、特に何も設定せずに、sampleをコピーしただけの状態です。最初は例に習って、sendmailを使う形にしていたのですが、うまくインストールできなくて、sampleと同じ内容にしました。
これから、プラグインの便利なものを見つけたり、使い方や機能でいいなと思うものがあったら、記事にしていきます。
今回は、redmineのインストールより、CentOSで固定IPを割り振る部分でつまづきました。
いつもは、VirtualBoxで、DHCPとホストオンリーネットワークの組み合わせでやっていたので、外部からも見れる固定IPを設定し、DNSの設定もしてというのが初めてだったので。
恥ずかしながら、”/etc/sysconfig/network-script/ifcfg-ethxx”に、DNSの情報を書いて、restartとすると、”/etc/resolve.conf”が生成されるということも今回初めてしりました。
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.x ←サーバのIP
NETMASK=255.255.255.0
TYPE=Ethernet
HWADDR=00:oo:3F:oo:1F:oo
GATEWAY=192.168.1.y
IPV6INIT=no
USERCTL=no
NM_CONTROLLED=yes
DNS1=127.0.0.1
DNS2=192.168.1.1
IPアドレスとかは、適当に書き換えてますが、こんな感じで”/etc/sysconfig/network-scripts/ifcfg-eth0″を書きました。いくつかのサイトを見ながら、これに落ち着いたので、メモしておきます。
ネットワークの知識の浅さを改めて感じる作業でした。redmine楽しみです。
百式管理人 田口さんのサイト(http://http://www.ideaxidea.com/)がきっかけで、モノラボさん(http://www.mono-lab.net/)を知りました。
今までいろいろ探した中でも、モノラボさん作成のテンプレートはかっこいい!
以下のダウンロードページにある3つともかっこいです。
個人的には neutral と monochrome が甲乙つけがたいところ。
http://www.mono-lab.net/download/monochrome/
次にテーマを変えるときは、どっちかにしようかな。
wp_head()とwp_footer()というメソッド。
wordpressのコア部分のメソッドなのですが、恥ずかしながら今まで知りませんでした。
javascriptを利用したプラグインを利用するときは、これらは必須です。
今回、テンプレートにlightboxを導入する際に動ず、調べていたら、ここに行き着きました。
wp_headは、通常はwordpressのバージョン情報等をmetaタグで表示するくらいですが、wp_headが呼ばれたタイミングで、事前に登録したメソッドを呼び出せる機能ももっているのです。この機能を利用して、pluginの動作に必要なcssとかjavascriptとかの記述を行っているpluginが多いのです。
wp_footerも同様です。こちらはjavascriptの実行文を書いてあることが多いです。
今回使ってたテンプレートには、このどちらもなかったので wp-lightpopが動作しなかったというのが、動作不良の原因でした。
pluginによっては、jqueryを読み込んだり、prototype.jsを読み込んだりするので、バッティングして動作しなくなることもありますし、自前でjqueryを読み込んでたりする上に、wp_headでさらに読み込まれるとおかしくなることもあります。この辺は、試しながら調整する必要がどうしても出てきそうです。
add_action(‘wp_head’, ‘自作メソッド名’) で、処理追加
remove_action(‘wp_head’, ‘自作メソッド名’)で、処理削除
自分でプラグインを作成するときは、この辺は覚えておくと便利ですね。
wordpress3.0にアップグレードしたら挙動が変わった部分を発見したのでメモ。
wordpressの場合、category-xx.php (xxはカテゴリID)というテンプレートを作成していると、該当のカテゴリIDを指定して記事一覧画面を出す場合(http://hoge.com/?cat=xx など)に、優先的にIDまで名前に入ったテンプレートを選択してくれていた。
基本的には、3.0でも一緒だが、変わっていたのは、指定されたカテゴリIDに対応する記事が1件もなかった場合。2.9までは、記事がなくてもcategory-xx.phpが呼び出されていたが、3.0からは、index.phpが呼び出されるようになっていた。archive.phpも置いてみたけど、archive.phpではなくindex.phpが呼び出された。
カテゴリID指定のテンプレートはあまり作る機会は無いが、複数の指定カテゴリの記事一覧を表示するとき等に、架空のカテゴリIDを指定して、テンプレート内にて複数カテゴリIDを指定したり、特定カテゴリIDを除外した記事一覧を取得して表示したりしていた。
今後は、index.phpを使うってことで。架空のカテゴリIDを複数使いたい場合は、index.phpの中で、$_GETの中身を見て切り替えることになりそうです。
この挙動は、タグ指定とかでも一緒だと思われます。
ソースコードをブログに書くようになって、横幅が足りないと感じていたので、単一記事のページを2カラムに変更しました。これで、ソースコードが見やすくなったと思います。TOPページもjavascriptで、2カラムと3カラムを切り替えるようにしようかなと考えています。
同時に以下のプラグインを追加しました。
■ サイトの右側にtwitterのリンクを表示させるプラグイン
http://wpburn.com/wordpress-plugins/wp-followme-plugin
■ 単一記事ページに関連記事のリンクを表示させるプラグイン
http://rmarsh.com/plugins/similar-posts/
http://rmarsh.com/plugins/post-plugin-library/
(similar-postsを使うには、post-plugin-libraryが必要です)
■ 新しい記事を作成した際に、twitterに投稿してくれるプラグイン
http://wppluginsj.sourceforge.jp/simple-tweet/
1つのテンプレート内で、複数の記事を表示する場合、the_date()を利用すると、
同一の日付が複数存在する場合、2つ目以降の日付が表示されなくなります。
そこで、the_time()に変更すると、同じ日付でも問題なく表示されます。
秒まで一緒だと表示されないのかもしれませんが、そんなことはないという前提で。
DBから取得した値をどうにかして加工しようとしてたので、the_time()を
知ったときは、すごい助かったーという気分でした。便利です。
友人のブログをWordPressを使って作っているのですが、画像をLightbox風に
表示させたいってことだったので、やってみました。
スクリプトの種類はいくつもあるんですね。
参考にさせていただいたのは、こちら。いつも読んでます。
http://www.designwalker.com/2008/01/lightbox.html
この中で、選んだのは、こちら。
http://www.dolem.com/lytebox/
理由は、ProtoType.jsや、jQuery.js等のライブラリを必要としないこと。
jQueryは使うので、まぁいいかなと思っていたのですが、ProtoType.jsは
使ったことがないので、問題が起きた時に対応できるかなという不安でやめました。
導入は1時間ほどで完了。ちょっとマニュアル読むのに時間がかかったくらいでした。
思ったより簡単だったので、仕事でも使える部分があったら、使ってみたいですね。