カテゴリー: WordPress

  • カスタム投稿タイプとNivo-Sliderで更新しやすいスライドエリアを作る。【Advent Calendar in 信州松本(だけじゃなくてもいいよ)】

    カスタム投稿タイプとNivo-Sliderで更新しやすいスライドエリアを作る。【Advent Calendar in 信州松本(だけじゃなくてもいいよ)】

    Advent Calendar in 信州松本(だけじゃなくてもいいよ)ということで、
    昨日のthinkAmiさんの機能のGoogleDriveAPIでHTMLファイルを作成し、GoogleドライブでWebサイト公開してアルクマを追いかける – メモ的な思考的なに引き続き、19日目を担当させてもらいます。Toro_Unitです。

    Google App Engineって楽しそうですね。プログラマさんの記事を読むと夢がほんとに広がります。

    そんなわけで、「何か作りたい!」という衝動に駆られたのですが、WordPressのカスタム投稿についてのプラグインを作ってたりするので、せっかくだからWordPressのカスタム投稿タイプでちょっと変わったことをやってみました。

    WP Custom Slider:https://github.com/Toro-Unit/wp-custom-slider

    デモサイト:https://torounit.com/wpcustomslider/

    WordPressのカスタム投稿タイプ&投稿サムネイルとNivo-Sliderでコンテンツスライダーを作ってみました。

    カスタム投稿タイプ部分

    [php]
    register_post_type(‘hoge’,array(
    ‘public’ => false,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘query_var’ => false,
    ‘capability_type’ => ‘post’,
    ‘has_archive’ => false,
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’ )
    );
    [/php]

    register_post_typeのpublicをfalseにすることで、URLでアクセスできないカスタム投稿タイプを作ることができます。
    また、supports値で、使う要素を制御できます。タイトルや本文入力欄も消すことだってできます。

    詳しくはCodexを!: 関数リファレンス/register post type – WordPress Codex 日本語版

    データの取得

    これだけだと「一体何に使うんじゃい!」って感じなのですが、このデータを
    [php]
    get_posts(‘post_type=hoge&posts_per_page=-1’);
    [/php]

    みたいな形で取得することができます。
    あとは、foreachに突っ込んでやりたい放題です。

    キャプションの部分は本文入力欄を使っています。setup_postdataに取ってきた記事データを突っ込むとthe_content等のテンプレートタグが使えるんですが、今回は本文が取れれば十分だったので、

    [php]
    $content = apply_filters(‘the_content’,$post->content);
    [/php]

    みたいなやり方で、本文をもってきています。ここまでで、大体完成。

    仕上げ

    そして、Nivo-Sliderを突っ込むだけなんですが、横幅が親要素の横幅まで拡大されてしまうので、置く場所によってはサイズがおかしくなる場合があったりしますので、

    [php]
    function fix_slide_size($size) {
    return array( 960, 400 );//横幅,高さ
    }
    add_filter("wp_custom_slider_size", "fix_slide_size");
    [/php]

    みたいにフィルターフックを使って大きさをカスタマイズできるようにしています。

    [php]
    public function set_image_size() {
    global $content_width;

    if($content_width) {
    $width = $content_width;
    }else {
    $width = 960;
    }
    $size = apply_filters("wp_custom_slider_size",array( $width, 350 ));
    add_image_size("slide", $size[0], $size[1], true);
    }
    [/php]

    ただ、apply_filtersがadd_filterよりも先に実行されると困るので、’after_setup_theme’というアクションフックに登録することで、テーマの読み込みが終わった後にプラグインが機能するようにしたりします。

    使い方

    いろいろ書きましたが、使い方としては、/wp-content/pluginsにプラグインを解凍・有効化して、

    テーマの中で、表示したい場所に
    [php]
    <?php wp_custom_slider();?>
    [/php]

    と書くだけです。サイズのカスタマイズや管理画面でのメニューなどの変更は、functions.phpにフィルターフックをちょこちょこ書いてあげれば、大丈夫。

    そんなわけで出来上がったのが、こちらのデモサイトです。
    Githubにも公開しています。https://github.com/Toro-Unit/wp-custom-slider

    カスタム投稿タイプでこんなこともできます!カスタムフィールドも合わせて使うと画像のリンクのURLなどが設定できたり夢が広がります。

    APIもかなり整備されているのでプラグイン制作も意外に簡単にできてしまうのでトライしてみてください。

    次は・・・

    明日は、4_1さんです。
    Advent Calendar in 信州松本(だけじゃなくてもいいよ)にお声かけいただきありがとうございました。m(_ _)m
    あと一週間、がんばっていきましょう!

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

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

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

    アップデート内容はこんな感じです。

    • バグフィックス
    • 管理画面周りの変更
    • Pointer APIの使用
    • コメントや、個別記事でのページング等の不具合も解消したつもりです。
    • 申し訳程度にフィルターフックを実装。今のところ、デフォルトのパーマリンク設定を変えるくらいしか使い道はないです。
    • マルチサイトでも一応動作します。

    with_frontにはまだ対応していません。カスタム投稿タイプ登録時にスラッグを”foo/bar”等にすれば、下の改装でカスタム投稿タイプ活用できるとは思います。
    https環境とか、nginx環境とかでのテストはまるでできていないので、ちょっとどうしましょうという感じではありますが。

    そんなわけで、例によっていつものごとく@Toro_Unitまでフィードバックいただければ幸いです。

    よろしくお願いします。m(_ _)m

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

    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ライフをお楽しみください。

  • カスタムフィールドのリピートができる、Custom Field Suite

    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が多機能すぎてあれ?ってなっちゃう場面とかでもなかなか使い勝手が良いと思います。

  • WordBench長野で、しゃべらせて頂く事になりました。

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

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

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

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

    よろしくお願いします!

  • WordPressの管理画面のフォントをメイリオに戻すプラグイン書きました。

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

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

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

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

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

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

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

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

    よろしくお願いします。

  • WordPressのマルチサイトでブログが追加されたときに、フロントページ・投稿ページを自動追加する

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

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

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

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

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

  • Word Camp Tokyo 2012 に参加してきました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • たぶん便利:WordPressで全ての投稿のアーカイブのページをこさえるプラグインを作ってみた。

    WordPressのパーマリンク設定のところに、

    数字ベース /archives/123

    ってのがありますよね。これ、/archives/で全記事のアーカイブが表示が表示されたら便利かなって思いませんか?

    /news/123

    とかにしたときに、/news/記事一覧がarchive.phpとか、arhive-post.phpで表示されたら素敵だと思いますよね?

    そんな機能が欲しかったのでプラグインをこさえてみました。もともとは仕事で必要になったものだったのですが

    https://github.com/Toro-Unit/post-archive

    いや、ページテンプレートカスタマイズすれば出来るじゃん!って言われそうですが、archive.phpが読み込まれるので、地味に便利だと思います。

    動作としては、WordPressのパーマリンク設定のところで、%post_id%とか%postname%だとかの置換タグの前にディレクトリ構造(archives/みたいな)があると、それで、全記事のアーカイブページにアクセスできるようになります。
    あと、設定->投稿設定のところにPost labelという項目が追加されます。ここで、サイドメニュー“投稿”を変更出来ます。また、全記事のアーカイブページのタイトルもこれになります。未設定の場合は投稿になります。

    近いうちに公式ディレクトリに上げます。多言語化ファイルも作ります。

    バグ報告とか要望とか応援とかは @Toro_Unit まで頂ければ嬉しいです。

  • CMS Dashboardをちょっとだけ日本語化してみました。

    かちびと.netさんで先月紹介されていたCMS Dashboardというプラグインをちょっとだけ日本語化してみました。

    Webに疎いクライアント向けにWordPressの管理メニューを使いやすくする為のプラグイン・CMS Dashboard

    ユーザーに触って貰う部分はとりあえず日本語になっているはずです。。。。
    ダウンロードはこちら content-management-system-dashboard-fix

    不具合等ありましたら@Toro_Unitまで、ご連絡下さい。