月: 2013年5月

WordPressのカスタム投稿タイプに専用の権限を設定してユーザーにアサインする

カスタム投稿タイプを設定すると、そのcapability_typeはデフォルトではpostになります。なので、例えば特定のユーザが属しているroleから、edit_postのcapabilityを削除すると、そのユーザーは投稿もカスタム投稿タイプも編集できなくなります。もう1つ、デフォルトで設定できるcabapility_typeにpageがあるのですが、こちらも固定ページのcapabilityを削除すると同様の結果になります。

そこで、カスタム投稿タイプにその投稿タイプ専用のcapabilityを設定すれば、他からは独立した権限設定が可能になります。

まずregister_post_type()の$argsにcapability_typeとmap_meta_capを追加。

function register_custom_post_types() {

    // set up the arguments
    $speakers_args = array(
        'labels' => array( ~省略~ ),
        'public' => true,
        'supports' => array( 'title', 'editor', 'thumbnail' ),
        'has_archive' => true,
        'rewrite' => array( 'slug' => 'speaker' ),
        // add capability for Speaker
        'capability_type' => array( 'speaker', 'speakers'),
        'map_meta_cap'=> true
    );
    // register this post type
    register_post_type( 'speakers', $speakers_args );

}
add_action( 'init', 'register_custom_post_types' );

これでcapabilityの設定が追加されることになるが、このままではどこのRoleにもアサインされていない状態なので、administratorにアサインする。

function tujicas_roles_set() {

    global $wp_roles;
    $role = get_role( 'administrator' );
    if ( $role ) {
        $role->add_cap( 'edit_speaker' );
        $role->add_cap( 'read_speaker' );
        $role->add_cap( 'delete_speaker' );
        $role->add_cap( 'delete_speakers');
        $role->add_cap( 'edit_speakers' );
        $role->add_cap( 'edit_others_speakers' );
        $role->add_cap( 'delete_others_speakers' );
        $role->add_cap( 'publish_speakers' );
        $role->add_cap( 'edit_published_speakers' );
        $role->add_cap( 'delete_published_speakers' );
        $role->add_cap( 'delete_private_speakers' );
        $role->add_cap( 'edit_private_speakers' );
        $role->add_cap( 'read_private_speakers' );
    }
}
add_action( 'init', 'tujicas_roles_set' );

$role->add_capに指定する項目は必要に応じて。各roleへのcapabilityの細かな設定は、上記のコードに追記してもよいですが、僕はMembersプラグインを入れて管理してます。

このトピックはあまり詳細に文書化されておらず、ググっても2~3年前の記事しかでてきません。ということで、メモ程度に記事にしてみました。

WordPress 3.6について話してきた

先週末、WordPress MeetupにてWordPress 3.6について(英語で)話してきました。今回のアップデートはマーク・ジェクィース(Mark Jaquith)3.6の開発前に提案していた通り、コンテンツ編集機能の強化にフォーカスされています。

20130519_wmt.007

WordPressの利用目的に関係無く、コンテンツの編集は必ず使う機能なので、デベロッパーにとっても、ユーザー/ブロガーにとっても興味深いアップデートではないでしょうか。

20130519_wmt.008

今回のアップデートは主に7つに絞ることができますが、このうち4つがコンテンツ編集関連です*。4つとも新しい機能ではなく、既存の機能をより使いやすくしたアップデートです。Betaで使ってみましたが、この中でPost Lockingが最も即効性高く便利さを感じられる機能だと思いました。
*但し、Editorial Flowは3.6からは外れました。

2013-05-30追記:投稿フォーマットUIの変更は、3.6のコアからは取り出し、まずはプラグインという形で開発が進められいくことに。ちょうどMP6のような進め方です。

20130519_wmt.012

テーマを作成する方は、投稿フォーマットUIの変更に伴い、theme_support()の書き方や、the_post_format_imgae()the_remaining_content()等の新しいテンプレートタグも導入されているので要確認。投稿フォーマット使ってないよ、と言う方も一度チェックしておくといいかも。この辺のことは今のところwptuts+の記事が一番詳しいです。

20130519_wmt.016

新しいデフォルトテーマのTwentyTwelveは、デザインが個人的に好みでないのですが、:before:afterがガンガン使われていたり、calchyphensが使われていたり、background-colorがrgbだったり、レティナ対応してたりと、CSSのコードの方をむしろじっくり読みたい感じです。

WordPressはWeb Operating System

少し前になりますが、The DradCastのエピソード007にマット・マレンウェッグが出演してました(Episode 007: WordPress OS)。その中で「10年後にWordPressはどうなっているだろうか?そもそも存在するだろうか?」という質問に対してディスカッションがあり、この中でマットがこういう興味深いことを言ってます。

When you think about it, we’re kind of building a web operating system. We are building something that other people can build of.

よく考えてみれば、僕たちはウェブ・オペレーティング・システム(OS)を構築してるみたいなもんだよ。他の人たちが何かを作る際の土台になれる物を作っているんだ。

WordPressがアプリエンジンとして使われ始めているのは去年前半の話題でしたね。行きつく先はウェブOSなんでしょうか。ビジョンとしては興味深いことを話してました。(正しいのか?/進むべき道なのか?というのはまた別の話)

他にディスカッションされていたトピックは大体こんな感じ(ほぼ時系列)。

  • WordPress.orgにプレミアムプラグインが無い件
  • テーマの為に金を払うのと、プラグインの為の金を払うのはバリューが違う?
  • WordPress.orgサイトはどあるべきか
  • WordPress.orgに要望・アイデアを述べたい時にどうしたらよいか
  • (他のCMSと比較して)WordPressの強みの1つは後方互換
  • WordPress、10年後は?
  • WordPressを汎用ではなく、目的別に分けていくべきかどうか
  • プラグマティックに
  • モバイルアプリ
  • WordPress.comのReader。(フォロー機能。参考:「RSSの次」の可能性をWordPressが見せてくれたかもしれない – カイ士伝
  • 100% GPL
  • WordPressとビジネス
  • WordCamp San Diegoの2nd day – 将来のWordCampにはビジネストラックも?
  • 専門分野化したWordCamp?
  • マットが先日うっかり漏らしてしまった(?)今開発をしている高速化の技術。キャッシュを活用してもオーバーヘッドは発生するので、どうのこうの…(1:02:00あたり)
  • WordCamp SF

動画はDradcastのサイトにもありますが、こちらにも貼り付けておきます。10年後のWordPress~、は42:20あたり。全体的におもしろかったので、興味のある方は是非。

http://youtu.be/jkWiygLIkQI

WordPress Codex 日本語版の「テーマの作成」の訳を3年ぶりに最新版に更新しました

WordPress Codex日本語版テーマの作成ページの訳を、最新版に更新しました。最後に最新版に更新されたのはNaoさんによる2010年6月なので、約3年ぶりです。

情報量は約2倍

2010年6月と言うと、ちょうどWordPress 3.0がリリースされた頃。テーマ作成に関する全体的な流れに大きな変更はありませんが、細部に変更が多くありました。削除された箇所、更新もしくは言い回しに変更があった箇所はもちろんですが、何よりも追加分が多かったです。得にテーマテンプレートファイルのセクションがガッツリ追加されてます。更新前と比較して、ページの長さは2倍くらいかな。

もちろんコードも更新されてます。

テーマの作成からコードだけコピペして使ってた方もチェックしておいてください。変更されてます。たとえば、「WordPressの公式テンプレート階層チャートで命名規則をチェック | バニデザノート」という記事に書かれている、「テーマの作成」の「クエリベースのテンプレート」に書かれているという下記のコードですが…

if (is_category(9)) {
   include(TEMPLATEPATH . '/single2.php');
} else {
   include(TEMPLATEPATH . '/single1.php');
}

現在はこうなってます。

if ( is_category( '9' ) ) {
    get_template_part( 'single2' );
} else {
    get_template_part( 'single1' );
}

get_template_part()

include()get_template_part()も、一見同じこと(ファイルをインクルード)をしているので、動けばどちらでも良いと思われるかもしれません。ですが、get_template_part() は、SSLの判定や、ファイルが存在しない場合の処理など、裏側で幾つか重要な処理を追加で行っています。加えて、$name引数を使って、親テーマ化も視野に入れた柔軟なカスタマイズが可能なコーディングも最近では当たり前のようにあります。デフォルトテーマもそう。

詳しくは下記参照。

まだまだあります

そういえば、最終更新が3.0リリース直後でしたが、3.0から実装されたget_template_part()タグや、マルチサイト機能実装に伴うユーザー権限周りの変更など、3.0からの変更点もCodex日本語版には反映されてませんでした。たぶん、英語版もまだ更新されてなかったからでしょう。

と言うわけで、3.0以降の変更にようやく対応。同様に、3.0頃から翻訳の更新が滞っているページもたくさんあるので、WordPressに貢献してみたい方は是非!
人気あるけど更新が滞っているのとか、どうですか?

My Instagramatic Golden Week 2013 part 2

Looking back at my Golden Week 2013 with my Instagram, part two of two 🙂

My Instagramatic Golden Week 2013 part 1

Looking back at first half of the Golden Week 2013 from my Instagram 🙂