カテゴリー: WordPress

  • WordPressでマルチサイトでサイトを作るときのトップページの処理。

    WordPressでマルチサイト機能を使って規模の大きいサイトを作ったりすることはよくあるのですが、トップページの処理が結構面倒です。

    home.phpやfront-page.phpを使う場合、同一テーマだと、子サイトのトップページにも適用されて結構結構悲しいことになったり。

    そんなときの対処法として。

    • フロントページの変更を使う
    • 子テーマを使う

    固定フロントページを作る

    コレが一番スマートなんじゃないかなと思います。
    toppage.php等のテンプレートを作成しておき、その後、ルートサイトの方で、固定ページを作成して、先ほど作ったカスタムページテンプレートを適用します。

    その後、設定→表示設定から、フロントページの表示のところを、固定ページに変更し、フロントページの項目を先ほど作ったページに変更します。

    子テーマを使う

    子テーマを使って、home.phpやら、front-page.phpを上書きします。そして、子テーマの方をルートサイトの方のテーマにセットします。いまいち直感性に書けるかもしれません。

    サイドバーが違う場合など、トップページの変更点が多い場合、こっちの方が良い場合もあります。

    ページを作成しないで良いので、wp_list_pages等を普通に使えます。

    WordPressはやっぱりブログがベースのCMSとして作られているので、ちょっとした工夫は必要ですね。

  • WordPressのfunctions.phpを書きまくってる人はプラグインにして公開すると幸せかもしれません。

    先日 Word Camp Tokyo 2011 で、宮内隆行さんのWordPress プラグインを作って世界と交流しようぜ!というセッションがありました。

    セッションのUSTREAMです。
    また、スライドはこちら:WordCamp Tokyo 2011でしゃべって来ました。

    WordPressでのサイト制作で使ったコードをブラッシュアップして後々自分で使えるようにプラグイン化してあったのですが、いっちょやるかー!って一念発起して、Custom Post Type Permalinksを公式ディレクトリにアップロードしました。そのときにやったこと、セッションを聴いた上で自分でやってみて色々躓いたこと、その後のこと、思ったことなどをつらつらと書き連ねていきます。

    1. wordpress.orgにログイン
    2. プラグインの登録
    3. Subversionの設定
    4. プラグインの公開準備 ※2012-01-04:多言語対応について追記しました。
    5. tagsの作成、公開
    6. フィードバックへの対応

    WordPess.orgにログイン

    WordPress.orgにアカウントを作ります。コレが日本語フォーラムでも、使われるので、ちゃんとした名前をつけて下さい。
    登録はこのページでできます。:http://wordpress.org/support/register.php

    プラグインの登録

    WordPress.orgにログインしたら、Plugin Directoryの左上のメニューからDeveloper Center→Add Your Pluginにアクセス。登録処理ができます。
    入力項目は3つ

    • Plugin Name (required) :プラグイン名 *必須
    • Plugin Description (required) :プラグインの説明 *必須
    • Plugin URL :プラグインのサイト *入れなくても良い

    です。Plugin Name以外はちゃんとして無くても大丈夫です。宮内さんも仰っていましたけど、Plugin Description には、プラグイン名を入れました。
    しばらくすると(半日くらい)WordPress.orgからメールが来ます。ここにSubversionのリポジトリなども載ってます。

    Subversionの設定

    普段Windowsで作業しているので、TortoiseSVNを導入します。ダウンロード:http://sourceforge.jp/projects/tortoisesvn/
    TortoiseSVNの導入や、使い方はこちらが詳しいです。なんちゃってTortoiseSVN(Subversion)の使い方シリーズ [SVNマニュアル擬き]

    プラグインの公開準備

    公開準備で主に頑張るコトは、

    • ライセンスの記述
    • 多言語対応
    • readme.txtの作成
    • デバッグモードでのチェック

    ですね。

    ライセンスの記述

    公式ディレクトリに公開する場合、ライセンスはGPLにしないといけないようです。なので、ライセンスの明示をしなくてはいけません。僕の場合はコードに
    [php]
    /*
    Copyright 2011 Toro_Unit (email : [email protected])
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    */

    [/php]
    こんな感じで記述しています。

    多言語対応

    コレは、管理画面があったりするようなプラグインとかだと発生する作業です。やっぱり海外の人も普通に使ってくれます。何件かフィードバックも頂きました。そんなわけで、コレも必須の作業になってきます。

    翻訳には、moファイルというファイルが必要なのですが、詳しい作成手順があったので、こちらを参照。poEdit で翻訳ファイルを作る « iDeasilo(Contact Form 7の作者さんのサイトです。)

    また、翻訳の手順は、翻訳ファイルを用意してプラグインを日本語化する | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Goを参照。

    ただし、 load_plugin_textdomain()の仕様が2.7から変わっていて、第2引数は非推奨になったので、
    [php]
    load_plugin_textdomain($domain,false,プラグインのwp-content/pluginsからの相対パス);
    [/php]
    とします。第3引数は省略すると、wp-content/pluginsに置かれてるファイルをさがします。

    2012-01-04追記
    プラグインの説明も日本語化できるようです。wokamotoさんに教えて頂きました。
    WordPress Plugin 作者に覚えておいて欲しいこと

    プラグインのヘッダーのコメントにText DomainとDomain Pathの2行追加します。
    [php]
    /*

    Text Domain: 多言語化ファイルのドメイン
    Domain Path: プラグインのwp-content/pluginsからの相対パス
    */
    [/php]
    こうすると、Descriptionの項目が日本語化されます。WordPressでのプラグインの一覧や、検索のときに日本語化されて表示されます。意外に盲点なのでこれはやっておきたいです!

    readme.txtの作成

    プラグインを公式ディレクトリに上げるときには意外に重要なreadme.txt。サンプルがhttp://wordpress.org/extend/plugins/about/readme.txtに載っているのでとりあえず、コピペ。この内容が、プラグインのページにそっくりそのまま反映されます。何度かStable tagの項目を書き換え忘れて新しいのは上がっているのに、推奨バージョンが変わらないとかいうことが結構ありました。なので要注意。細かい事は、readme.txtのサンプルを読めばだいたい解ります。英語で大変ですが、どうせ英語で書くはめになるので、頑張って読んでみましょう。

    デバッグモードでの検証

    つってもやることはたいしたことじゃないです。wp-config.php定数を
    [php]
    define(‘WP_DEBUG’, true);
    [/php]
    に書き換えるだけです。そうすると今まで表示されてなかったエラーがじゃんじゃん出てきます。コレはバグの温床になったり、環境や他のプラグインの影響などで不具合を起こすことがあるので、頑張ってつぶします。エラーが起こってる箇所がプラグインファイルじゃないとしても、アクションフックなどの影響で場所が変わっているだけで、確実にそのエラーはプラグインのせいで起きてます。頑張ってつぶしましょう。

    tagsの作成、公開

    いよいよ公開です。tagsにコミットします。プラグインディレクトリを右クリックしてtortoiseSVN→ブランチ/タグの作成から、タグを作成します。バージョン番号でtagの作成をするのですが、バージョン番号はなるべくシンプルに、また数字と.だけでつけた方が良いと思います。この数字を比較してプラグインのアップデートがあったかどうかを確認しているようです。
    コミットして10分くらいすると、ちゃんと”Download Version”のボタンが出て来ます。たまに、更新日時が変わらない場合もありますが、僕の場合はほおって置いたら3日くらいでなおってました。

    これで、Plugin Developerデビューです。おめでとうございます。この瞬間はなんだかんだで嬉しかったです。

    フィードバックへの対応など、その後

    ただ、公開はゴールじゃないんです。むしろやっとスタートラインに立ったということなのです。
    プラグインの規模にもよりますが、ここから、1週間くらい僕は、バグ報告、要望などのメールが結構来ました。

    「これからが本当の地獄だ・・・」と脳内でベジータ様がつぶやき出したりしますが、ここがいちばん公開してよかったなぁ。と思うことでした。

    ただ、要望を出すだけじゃなくて、お忙しいなか、時間を割いて、プラグインのテストに付き合ってもらえたり、「ここのコードこうした方がいいよー」というかんじでコードを送ってくれたり。
    もっとちゃんとデバッグしてから公開しろとか若干怒られるかと思ってたり結構内心ビクビクしていたのですが、そんなことは無く、ホント、メールやTwitterの向こう側にいる方々に大変助けられました。ていうか正直そんなにレスポンスあるのかよ!ってびっくりしました。

    公開してからの方が、遙かに開発速度は上がりました。バグも自分で探しきれないことは多々あるので、本当に助かります。また、要望なども僕みたいな一人きりで作っている人間からしたら有り難いことです。実装するか、できるかはともかく。。。。
    また、フォーラムの方でもいくつかトピックスが上がっていました。しかし、こちらは全部英語で現在解読に四苦八苦状態です。誰か助けて下さい(涙)

    あと、公開して良かったなと思うことは、ブログなどで取り上げてもらったりしたことですかね。

    やっぱり誰かにこれいいよって言ってもらえるのは嬉しいですよね。

    かちびと.netさんの記事から抜粋しますが、

    フィードバックも開発に必要不可欠なのですから、使って感想や問題を開発者に伝えるだけでも、あなたも開発者の一員と言えるわけです。

    はまったく持ってその通りだと思いました。「フィードバックしたらうざいとか思われるかな・・・」とか思っていたこともありましたが、作り手になるとフィードバックというのは本当に有り難いです。趣味半分仕事半分みたいな感じで作っているものなので結構モチベーションの維持は結構大変なのですが、感想をブログに書いてもらうとかでもかなりモチベーションの維持になります。

    まぁ、長々と書いてきましたが、プラグインそのものの作成自体はそこまで難しいものではありません。基本的にはfunctions.phpに書くのと変わりません。
    自分用にプラグイン化して公開するでもいいと思います。メンテナンスが楽になるので。僕も最初はそんな気持ちで始めました。そしたら、初めて行ったWordCampで「プラグイン作ってたりするよね?」と言ってもらえて話のネタになったり、先ほども書きましたが、フィードバックを色々頂けたりで嬉しくなったり、誰かの役には立ってるんだなとか思えたり。サイトのアクセスが増えたり。とささやかな幸せをいくつか味わうことができました。

    『プラグインがないから、しょうがない、functions.phpで頑張るか。』って経験をお持ちの方って結構多いって思うんです。そんな人は是非プラグイン化してみることをおすすめします。GPLなんだから、元から有るプラグインをフォークしても良いと思うし、似たようなプラグインがあっても日本人が作っているってだけで、結構違うものです。

    きっとささやかな幸せを味わうことができますよ。その積み重ねがWordPressなりオープンソースのソフトウェアなり、コミュニティをより良いものにしていくと思うし、そうやって盛り上がれば最終的に自分自身にも恩恵はあると思います。

    あ、今更ですが、公開中のプラグインです。

    フィードバック、ご意見ご感想、お仕事のご依頼などは@Toro_Unitか、Contactに頂けたら嬉しいです。また、英語のフォーラムを解読してくれる方などいましたら、ご協力頂ければ幸いです。m(_ _)m

  • Custom Post Type Permalinks 0.7 をリリースしました。

    Custom Post Type Permalinks 0.7 をリリースしました。

    変更点は、

    • コードの全面書き直し。
    • 管理画面をパーマリンク設定に統合
    • カスタム分類に対応

    です。

    今後の予定としては、

    • カスタム投稿のカスタムスラッグへの対応(すみません。未だできてません・・・)
    • WordPress3.3で追加されたPointerでの機能の表示

    等です。

    0.6.2の公開時はフィードバックをたくさん頂きましてありがとうございました。
    一応、要望頂いた管理画面や、カスタム分類等はちゃんと実装してあると思います。

    また、何かありましたら、@Toro_Unitまで、ご連絡頂ければ幸いです。

  • Custom Post Type Permalinksを公式ディレクトリに公開しました。

    Custom Post Type Permalinks公式ディレクトリに公開しました。

    また、バージョンも0.6.2にアップデートしました。

    プラグインのデバッグにmotorajiさんに多大なご助力を
    頂きました。ありがとうございます。http://motoraji.com/で活用して頂いてます。

    公式ディレクトリ:http://wordpress.org/extend/plugins/custom-post-type-permalinks/

  • 自分用ブックマークサイトを作ろう。

    WEBデザインの参考になるようなサイトを集めたサイトが最近たくさんありますよね。
    僕もよくお世話になっています。
    どのサイトも個性があったりで面白かったり。

    などetc…

    でも、それとは別に、自分のためのブックマークサイトを持ったほうがいいと思います。昔はよくあれもこれもはてなブックマークに入れていたのですが、探し出すのに一苦労だったわけです。だいたい、記事の内容ではてブしたサイトはキーワードで検索できるんですけど、ビジュアルが素敵なサイトとかは、全然探せないのです。

    というわけで、自分で作ってしまおうと思ったわけです。とりあえず作ったものはこちら:http://bm.torounit.com/
    というわけで、WordPressでブックマークサイト自作のチュートリアルです。

    自作するメリット

    • タグ・カテゴリなどが自分仕様にできる。
    • Press This(ブックマークレット)が使えて便利!
    • 自分の勉強になるかもしれない。
    • コードが書けて楽しい。
    • 自分も有名なWEBデザイナーになった気分。

    まぁ、とりあえず、Press Thisが使えるってのは便利だと思います。見てるページをそのままクリックだけで登録できるのはなかなか便利です。

    作り方

    とりあえず、Press Thisをすると、
    [html]
    <a href="http://hoge.com">ほげほげ</a>
    [/html]
    のような形で、ページのURLとタイトルが本文中に挿入されます。
    なので、それを正規表現で取り出して、カスタムフィールドに保存します。

    [php]
    function save_post_url($post_id){
    $postData = get_post($post_id);
    preg_match(‘/<a .*href=[\’"]+([^\’" ]+).*?>(.*)<\/a>/’,$postData->post_content,$match);

    save_post_meta($post_id,"site_url",$match[1]);
    save_post_meta($post_id,"site_title",$match[2]);
    }

    function save_post_meta($post_id,$data_key,$save_data){
    if ( "" == get_post_meta( $post_id, $data_key)) {
    add_post_meta( $post_id, $data_key, $save_data, true ) ;
    } else if ( $save_data != get_post_meta( $post_id, $data_key )) {
    update_post_meta( $post_id, $data_key, $save_data ) ;
    } else if ( "" == $save_data ) {
    delete_post_meta( $post_id,$data_key) ;
    }
    }
    add_action("save_post","save_post_url");
    [/php]

    これで、カスタムフィールドのsite_url,site_titleにそれぞれ、URLとページのタイトルが保存されました。

    次に出力部分です。サイトのスクリーンショットですが、WordPress.comのAPIでスクリーンショットがとれる奴があるので、有り難く使わせて頂きます。

    [php]
    $url = post_custom("site_url");
    if( $url ){
    echo "<img src=’http://s.wordpress.com/mshots/v1/".urlencode(clean_url($url))."?w=300&h=250′ alt=” />";
    }
    [/php]

    で、サイトのスクリーンショットが取得できます。これをループ内で実行すれば良い訳です。

    これで、デザインとかHTMLをちゃんと書いてあげれば、完成です。
    デフォルトテーマに書き込んでも良いと思います。でも、『俺も有名なあの人達みたいに・・・』的な気分を味わいたいならちゃんとテーマを作った方がいいです。

    あと、検索フォームを設置するなら、タグやカテゴリーで検索できると使い勝手が良いので、Search Everything
    を導入しておくと良いと思います。

    これでみんなもあの人達みたいに・・・!って訳にはそう簡単にいかないわけですが、少なくとも自分の気になるサイトをアーカイブしていけるので、自分の情報の整理くらいには活用してもらえるのではないでしょうか?

    もし作ってみた人いたら、絡んでくれると嬉しいです。

  • Custom Post Type Permalinks 0.4.5をリリースしました。

    Custom Post Type Permalinks 0.4.5をリリースしました。
    WordPress3.3に対応しました。
    アーカイブ周りのバグを修正しました。

    近々公式ディレクトリに登録予定です。

    最新情報はCustom Post Type Permalinksをご覧下さい。

  • Custom Post Type Permalinks 0.3をリリースしました。

    先日リリースした、カスタム投稿タイプのパーマリンクを個別に設定するプラグイン、Custom Post Type Permalinksをアップデートしました。

    2011-11-14追記:最新版はこちらCustom Post Type Permalinks

    スラッグに対応させました。

    custom-post-type-permalinks.0.3

    また、現在、WordPress3.3beta2にて、カスタム投稿のアーカイブ“/post_type/”がページが見つかりませんになってしまいます。WordPress3.2では問題なく動作してます。

    またぼちぼちアップデートしていきます。

  • カスタム投稿タイプのパーマリンクを個別に設定するプラグイン

    カスタム投稿タイプのパーマリンクをそれぞれ設定するプラグインを作りました。
    2011-11-14追記:最新版はこちらCustom Post Type Permalinks

    Custom Post Type Permalinks 0.2.5

    2011/11/02.アーカイブのURL追加にバグがあったので修正。

    機能

    • 各投稿タイプのパーマリンクを設定
    • 各投稿タイプごとのアーカイブのURL(“exsample.org/posttype/”),日付によるアーカイブのURL(“exsample.org/posttype/2011/11/02”的な)を追加
    • wp_get_archives()のパラメータに“post_type=投稿タイプ”の追加
    • カスタム分類のパーマリンクを“/投稿タイプ/カスタム分類名/カスタム分類”に変更

    があります。

    パーマリンクの変更は、サイドバーの設定に、『カスタム投稿タイプのパーマリンク』というのが追加されるので、そこから設定します。

    一応、Custom Post Type UIでも、プラグインやfunctions.phpでカスタム投稿タイプを追加しても、動作しています。

    多言語対応等は今後またそのうち対応します。。。。。

    現在カスタムスラッグには対応していません。すみません。。。

    バグもまだあるかもしれませんが、もしあったら@Toro_Unitまでお知らせいただけるとありがたいです。

  • WordPressで投稿の画像を取得

    WordPressで投稿の画像だけを表示することはアーカイブページやトップページでよくあると思います。

    たとえばこんな感じ

    なので、それ用の関数をつくりました。
    投稿サムネイルがある場合はそれを、ない場合は記事のギャラリーに入っている一番最初の画像を表示しています。

    [php]
    function print_post_image($size = ‘thumbnail’){
    if ( has_post_thumbnail() ) {
    the_post_thumbnail($size);
    } else {
    $attachments = get_children(array(
    ‘post_parent’ => get_the_ID(),
    ‘post_type’ => ‘attachment’,
    ‘post_mime_type’ => ‘image’,
    ‘order’ => ‘DESC’
    ));

    if(!empty($attachments)){

    $img = array_shift($attachments);
    echo wp_get_attachment_image($img->ID ,$size);
    }
    }
    }
    [/php]

    the_excerpt等と一緒に使うと結構楽しいかもしれません。

  • WordPressでサブページのナビゲーション

    企業サイト等を作るとき、サブページにナビゲーションに用意することって結構あると思います。サイドバーあたりに。

    たとえば
    [html]
    <nav class="sideNav">
    <h2><a href="#">会社情報</a></h2>
    <ul>
    <li><a href="#">会社概要</a></li>
    <li><a href="#">事業内容</a></li>
    <li><a href="#">社長挨拶</a></li>
    </ul>
    </nav>
    [/html]
    みたいな感じの。

    それのWordPressでの実装です。
    [php]
    <nav class="sideNav">
    <?php
    if(is_page()){
    $rootId = array_pop(get_post_ancestors( $id ));
    if(!$rootId){
    $rootId = $id;
    }
    ?>
    <h2><a href="<?php get_permalink($rootId);?>"><?php echo get_the_title($rootId);?></a></h2>
    <ul>
    <?php wp_list_pages("title_li=&child_of=$rootId" );?>
    </ul>

    <?php
    }else {
    ?>
    <h2><a href="/news">ニュース</a></h2>
    <ul>
    <?php wp_get_archives();?>
    </ul>

    <?php
    }
    ?>
    </nav>
    [/php]

    get_post_ancestors( $id )親ページのリストが配列で出るのですが、最後の要素が一番上の階層のページなので、それをarray_popで持って来ます。
    wp_list_pagesで取得したIDの子孫のページだけ吐き出すようにしています。

  • WordPressで親ページの判定をするスクリプト

    WordPressでis_page()風味に使える、スクリプトを書きました。
    is_page()に加えて、そのページの親、更にその親要素に出現すればtureを返します。

    [php]
    function is_current_page($page = "") {
    if(is_page($page)){
    return true;
    }

    global $id;
    $parent = $id;

    do {
    $parent = get_post($parent)->post_parent;

    if(get_post($parent)->post_name == $page||get_post($parent)->ID == $page||get_post($parent)->post_title == $page){
    return true;
    }
    }
    while($parent > 0);

    return false;

    }
    [/php]

    子ページとかをよく使う情報量の多いサイトなんかはでは便利だと思います。

  • Add New Category Post をアップデートしました。

    先日リリースした、Add New Category Postをアップデートしました。
    主にJavaScript周りの修正をしています。

    @Toro_Unit Add New Category Postプラグインですが、「新規投稿を追加」ページ以外だとCurrent Menu表示部分でスクリプトエラーが出るようですのでご検証頂けますでしょうか。less than a minute ago via web Favorite Retweet Reply

    という報告をいただいていましたが、修正されていると思います。一応Mac OS X 10.6 Firefox5 とChromeで確認しています。

    @show_webさんありがとうございました。

    ダウンロード:Add New Category Post Ver.0.5