投稿者: Toro_Unit

  • WordBench長野の第1回勉強会に参加してきました。 #wbNagano

    11月24日に塩尻インキュベーションプラザで行われた、WordBench長野の第1回勉強会で、「カスタム投稿タイプ&カスタムタクソノミー」というテーマで発表をさせていただきました。

    [slideshare id=15335944&doc=wbnagano20121124-121125054736-phpapp01]

    人と話すこと自体嫌いではないのですが、何せあがり症で人見知りのコミュ障なので、まぁ楽しいながらも大変な経験でした。
    発表の最中でこんなツイートが画面にも映ったり。

    https://twitter.com/CrudeMusic/status/272228366399205377
    そんな苦労もありながらも「カスタム投稿・タクソノミー便利そう!使ってみたい!」みたいなレスポンスも結構いただけたのでそれなりに登壇者としての務めを果たすことができたのではないかなと。

    誘っていただいた、みやざわさん@dxd5001を始め、運営して下さった皆様、発表を見てくれた方やお話させてもらった参加者の方々本当にありがとうございました。

    また、僕が燃え尽きていたせいで声をかけることができなかった方も居たので、TwitterでもFacebookでもリアルでも絡んでいただけたら嬉しいです。発表でも言いましたが、お金以外の寄付も歓迎です。

    ビールも好きですけど、美味しい日本酒はもっと好きです。でもおいしいごはんもやっぱり大好きです。

    そんなわけで、スライドの補足というか、スペースの都合で省略した、register_post_typeregister_taxonomyの実装例をつらつらと。Custom Post Type UIより、細かい設定ができますので、慣れてきたら、コードをfunctions.phpに書くほうがベターかと思います。テキストボックスに一つ一つ書いていくより楽だし、使いまわしも利くので仕様が固まっている場合はこっちのほうがいいかなーと思います。どうせ書くことなんて変わらないですし。

    [php]
    add_action(‘init’,’add_ctp’);
    function add_ctp() {
    register_post_type(
    ‘goods’, //カスタム投稿名
    array(
    ‘label’ => ‘商品’,
    ‘description’ => ”,
    ‘public’ => true, //表示したり、URLでアクセスできたりするかどうか
    ‘hierarchical’ => false, //固定ページみたいに階層にするかどうか
    ‘rewrite’ => array( ‘slug’ => ” ),
    ‘query_var’ => true,
    ‘has_archive’ => true, //アーカイブページを作成する
    ‘menu_position’ => 5, //メニューの位置。5は“投稿”の下。
    ‘supports’ => array( ‘title’, ‘custom-fields’ ),どんな機能を使えるようにするか。
    ‘labels’ => array (
    ‘name’ => ‘商品’, //表示名
    ‘all_items’ =>’商品一覧’, //すべての投稿のラベル
    ‘add_new’ => ‘新規追加’,
    ‘add_new_item’ => ‘新しい商品を追加’,
    ‘edit’ => ‘編集’,
    ‘edit_item’ => ‘商品を編集’,
    ‘new_item’ => ‘新しい商品’,
    ‘view’ => ‘商品を表示’,
    ‘view_item’ => ‘商品を表示’,
    ‘search_items’ => ‘商品を検索’,
    ‘not_found’ => ‘商品が見つかりませんでした。’,
    ‘not_found_in_trash’ => ‘商品がゴミ箱内に見つかりませんでした。’,
    )
    )
    );

    register_taxonomy(
    ‘goodscategory’, //タクソノミー名
    ‘goods’, //対応する投稿タイプ
    array(
    ‘hierarchical’ => true, //階層(カテゴリ)にするか非階層(タグ)にするか
    ‘label’ => ‘商品カテゴリー’,
    ‘query_var’ => true,
    ‘rewrite’ => true,
    ‘labels’ => array(
    ‘name’ => ‘商品カテゴリー’,
    ‘singular_name’ => ‘商品カテゴリー’,
    ‘search_items’ => ‘商品カテゴリーを検索’,
    ‘all_items’ => ‘商品カテゴリー’,
    ‘edit_item’ => ‘商品カテゴリーを編集’,
    ‘update_item’ => ‘商品カテゴリーを更新’,
    ‘add_new_item’ => ‘商品カテゴリーを追加’,
    ‘new_item_name’ => ‘新しい商品カテゴリー’,
    )
    )
    );

    register_taxonomy(
    ‘campaign’,
    ‘goods’,
    array(
    ‘hierarchical’ => true,
    ‘label’ => ‘キャンペーン’,
    ‘query_var’ => true,
    ‘rewrite’ => true,
    ‘labels’ => array(
    ‘name’ => ‘キャンペーン’,
    ‘singular_name’ => ‘キャンペーン’,
    ‘search_items’ => ‘キャンペーンを検索’,
    ‘all_items’ => ‘キャンペーン’,
    ‘edit_item’ => ‘キャンペーンを編集’,
    ‘update_item’ => ‘キャンペーンを更新’,
    ‘add_new_item’ => ‘キャンペーンを追加’,
    ‘new_item_name’ => ‘新しいキャンペーン’,
    )
    )
    );

    }
    [/php]

    カスタム投稿タイプの追加だったら、便利なクラスもあるので、そちらを活用してもよいと思います。
    カスタム投稿タイプを簡単に利用できるようにする便利コード | モンキーレンチ

    あとは、順序をサポートしたカスタム投稿タイプのデフォルト表示順を変更してみる | Simple Colorsとかを使うと、商品一覧とか、日付順で管理をしたくないものとかでは有効です。

    また、register_taxonomyの’hierarchical’は、trueにしておいたほうが管理画面上では何かと使い勝手が良いです。

    こんな感じで、実はかなーり奥が深い機能です。’public’ => false を活用してプラグインのデータを保存したり(Advanced Custom Fields,Contact Form 7なんかで使われている手法です。)、ページを作成せずに更新可能なエリアを作ったりなど、応用範囲は幅広いです。

    カスタム投稿タイプとカスタムフィールド、WP_Queryを組み合わせるとほんとに無敵です。DrupalのViews+CCKと似たような感じですかね。そっちよりは、機能的には少ないですが、実装はシンプルです。Viewsは本当に何でも持ってこれますし、記事の抽出条件もかなり細かく設定できますけど、その分パラメーターも多いので、場合と好みで使い分ければいいんじゃないかと思います。

    カスタム投稿タイプ・カスタムタクソノミーで素敵なWordPressライフをお楽しみください。

  • 静的サイトを作るときに、ヘッダーとかグローバルナビゲーションとかを共通化して、読み込むとコードも見やすいし、修正とかのメンテナンスも楽ですよね。

    そんなときに、便利な関数です。

    [php]
    <?php

    function is_current( $uri = "" ) {
    $uri = trim( $uri, "/" );
    $request_uri = $_SERVER[‘REQUEST_URI’];

    if( $uri && strpos($request_uri."/", "/".$uri."/", 0) !== FALSE ) {
    return true;
    }
    $request_uri = trim(str_replace( "/index.php", "", $request_uri ), ‘/’);
    if( !$uri && !$request_uri ) {
    return true;
    }
    return false;
    }

    function echo_current( $uri = "" ) {
    if(is_current( $uri )) {
    echo ‘current’;
    };
    }
    ?>
    [/php]

    こんな感じで使います。引数が空の場合は、トップページのときにcurrentを吐きます。

    [php]
    <li class="nav1 <?php echo_current();?>"><a href="/">ホーム</a></li>
    <li class="nav2 <?php echo_current("news");?>"><a href="/news">ニュース</a></li>
    [/php]

    静的サイトを作るときにrequire_once $_SERVER[‘DOCUMENT_ROOT’].”/inc/functions.inc”;
    とかしてやると色々捗ります。

  • http://komodo.arrow.jp/wp/733/ Custom Field Suite-複数フィールドのリピート可能 | WordPress 編

    カスタムフィールドのカスタマイズをするプラグインは度々紹介しているんですけど、リピートの機能(同一フィールドの追加)がなかなか素敵だったので、紹介します。

    WordPress › Custom Field Suite « WordPress Plugins

    まぁ、Advanced Custom Field(ACF)をフォークしたプラグインなのでリピートも似ていますが・・・・

    Magic Field 2等では出来ない、リピート内にリピートを入れたり等の芸当が出来ます。ACFだと$25係ってしまううんですがそれも無料です。その分寄付して下さいってことでしょう。

    なのでアクティベートしなくて良いので色々いじり倒せたり出来ます。
    ただ、管理画面の綺麗さや、日本語化、アドオンの多さ等々ACFにしかできないことも多々あるのでそこは一長一短な感じですね。

    ACFの簡易版という認識で使うと良いかなと思います。ACFが多機能すぎてあれ?ってなっちゃう場面とかでもなかなか使い勝手が良いと思います。

  • 11月の24日にWordBench長野が塩尻インキュベーションプラザ(SIP)で開催される事になりました。

    そこで、カスタム投稿タイプ&カスタムタクソノミーの使い方、プラグインの紹介というテーマでしゃべらせて頂く事になりました。

    人前で話すとかはあんまり得意では無いんですが、せっかくお誘い頂いたので、楽しんでやりたいなと思います。

    参加登録はこちらからです。
    http://atnd.org/event/wbn20121124

    よろしくお願いします!

  • WP Multibyte Patch 1.6.3 から、管理画面のフォントがMS Pゴシックになりました。案外に慣れてしまうと、MS Pゴシックが見づらく感じてしまうモノです。
    なので、修正するプラグインのようなモノを書きました。

    meiryo-admin-patchみたいな、ディレクトリを作って、wp-content/plugins/にアップロードして、プラグインを有効にすれば、メイリオになっていると思います。

    メイリオファンの皆様、よろしくお願いします。

  • この間コーディングでfloatとheightでやるのも嫌だなぁと思い、inline-blockを活用したのですが、隙間を消すのに意外に苦労したので、メモ。
    letter-spacingで隙間を消すのが有名だと思いますが、それだとOperaでチェックした時に隙間が消えない!という問題に先日の案件で直面しました。

    [html]
    <div class="columns">
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    </div>
    [/html]

    [css]
    .columns {
    letter-spacing: -0.4em;
    word-spacing: -1em;

    }

    .column {
    display: inline-block;
    letter-spacing: normal;
    word-spacing: normal;
    /display: inline;
    /zoom: 1;
    }
    [/css]

    word-spacingを指定すると、Operaでも隙間が消えるみたいです。ただ、Webkit系のブラウザはword-spacingだと効かないみたいです。
    inline-blockって意外にブラウザ間で実装が違うみたいですね。ie8以上案件ならdisplay:table-cellを使う方が無難かも知れないですね。

  • Custom Post Type Permalinksをアップデートしました。

    アップデート内容ですが、バグフィックスです。
    パーマリンク設定が、archive/%post_id%.htmlみたいなときに、wp_get_archiveのFixが機能しなくなる問題や、Categoryをカスタム投稿タイプに紐づけた場合のパーマリンクなど、細かいバグフィックスを行っています。

    今回は海外の方から「バグがあったらから修正したけどどう?」みたいな感じでコードを送って頂いたりで、そこそこ大きなアップデートになってます。

    そんな感じで、フィードバックありきで、アップデートを今後も進めていくことになると思いますので、なにかバグやら発見したら、メールか@Toro_Unitまで、ご連絡頂ければ幸いです。

    よろしくお願いします。

  • 「WordPressのマルチサイトを使ったWEBサービスを作る」なんてコトを最近ちょこちょこやっているのですが、そのときに専用のページをこさえたりしたいなんて、ことがありまして。

    フロントページ機能を自動的に有効化したかったのですが、調べてみたらそんなに難しくなさそうだったので作ってみました。
    別に関数一つなんだからクラスにする必要ないんじゃないかとは思いますが、そこはご愛敬です。

    wpmu_new_blogというアクションフックがブログの新規作成時に実行されるらしいです。しかも結構色々と変数を渡してくれるみたいです。
    WordPressのネットワークで新規サイト作成時のAction Hook探し | ちいさな創々

    なので、それにフックして、wp_insert_postで、ページを作成して、それをupdate_optionで設定する、という意外に単純な作りで実現できます。

    BUddyPressなんかで活用活用したい!

  • 9月15日に行われた、Word Camp Tokyo 2012に参加してきました。

    セッションの感想とか書き出すとキリがないのであれですが、とりあえず、色々楽しかったです!色々勉強になりました。

    とりあえず、個人的には、懇親会や、本編中に色々な人と立ち話などさせていただいたのが楽しかったです。

    地方でフリーランス勢なので、なかなか同業者の方々や、プラグイン作者の方々などとお会いする機会がなかなか持てずにいたので、非常に勇気をもらったり、勉強になったり、そんな1日でした。

    Custom Post Type Permalinksしってるよー、つかってるよー、あーしたらもっといいよー、などなど、色々お話ができたりで、人見知りの自分としては、プラグイン作ったおかげで、話のネタには困らなかったです。

    というわけで、プラグインつくると、色々とコミュニケーションのきっかけになったりで楽しいし、スキルアップの機会も得やすいので、大変だけどそれに見合うだけの何かはあるんじゃないかなー、何て思いました。

    まぁ基本的にはfunctions.phpで使ったコードを使いまわしたいがために作ってるだけなんですけどね。

    次回参加する際にはLTとかもやりたいなーなんて、思います。
    精進します。

  • 最近、popStateとかpushStateとかいい加減に活用しようと思いまして。

    というのも、6月頃にgoogleのアルゴリズム変更があったようで、js有効時はhashChangeにするようなサイトがSEO的に不具合が出てしまったんですよね。トップページは問題無いのですが、下層ページがトラッキングされないとか、色々SEO的に不具合が出たり等、色々トラブルがありまして・・・・ 参考jQuery hashchange event を使ってみた。
    1年前は全然普通に使えたのにねぇ・・・・

    まぁ、そんなこんなで、popState,pushStateを使うことになりました。
    使い方はこの記事が詳しいです。AjaxでもURLを更新して履歴を作れるHTML5のpushState試してみた | webOpixel

    で、ページ内リンクも使ったりで色々ごちゃごちゃやっていたのですが、ページ内リンクでもpopStateのイベントが発火してしまうようです。

    B1⇔B2の戻る/進むでページリロードが発生しない(=popstateイベントが送出される)ってところがポイントです。

    1点腑に落ちないのがページ内リンク(ハッシュが付与されるページリロードが発生しないページ履歴更新)でもpopstateイベントが発生するよう。

    [HTML5]History APIめも – l4l

    『同一ページ中でアドレスバーに変更があった場合にイベントが発火する』みたいな解釈って事ですね。なるほど。

    ページ内リンク主体で色々やりまくるようなサイト(http://www.cooper.com/みたいな。popstateとかは使って無いようだけど)を構築する際は色々注意しないといけない見たいですね。

  • Custom Post Type Permalinks をアップデートしました。

    久しぶりのアップデートになりますね。

    • タクソノミーアーカイブでpage/2等が404になる
    • 子ページのリンクのバグ

    等のバグを修正しました。
    また、コメントへのパーマリンクに対応しました。対応出来てなかったです。m(_ _)m

    管理画面周りにも若干手を入れてます。

    バグ報告などありましたら、@Toro_Unitまで、お願いします。