WordPress Advent Calendar 2012 の2012年12月24日担当のブレンです。
「ブログで書くには文章が少ない」
「コードをスニペット登録するだけでは足りない」
といった WordPress カスタマイズ Tips を紹介します。
ユーザーが購読者権限の場合パスワードを変更不可にする
function xxx_show_password_fields( $view, $profileuser = null ) { $ret = $view; global $user_id; if ($view == false) { $user_info = get_userdata($user_id); if ($user_info) { if ($user_info->user_level == 0) { $ret = false; } } } return $ret; } add_filter( 'show_password_fields', 'xxx_show_password_fields', 10, 1 );
show_password_fieldsフィルターを使い、ユーザーの権限がレベル1(購読者)の場合にfalseを返すことでパスワード項目を非表示にします。
ユーザーが購読者権限の場合 Admin Bar を非表示にする
if ( !current_user_can( 'level_1' ) ) { show_admin_bar( false ); }
current_user_can でログインユーザーの権限を確認し、レベル1(購読者)の場合に Admin Bar を非表示にします。
コメントフォームのHTMLを変更
comment_form(array( 'fields' => array( 'author' => '', 'email' => '', 'url' => '', ), 'logged_in_as' => '' 'comment_notes_before' => '', 'comment_notes_after' => '', 'title_reply' => '', 'title_reply_to' => '', 'comment_field' => '', ));
各配列の文字列にHTMLを入れることで、デフォルトの出力内容を差し替えるイメージです。
fields は未ログイン時、logged_in_as はログイン時のHTMLを指定します。
デフォルトの出力内容は WordPress コアの comment_form 関数内に書かれていますので、参考までにご覧ください。
投稿データをguidで検索する
function posts_where_guid( $param ) { global $post; global $wpdb; $meta_url = get_post_meta( $post->ID, 'url', true ); return " AND ($wpdb->posts.guid = '{$meta_url}')"; } add_filter( 'posts_where', 'posts_where_guid'); $posts = get_posts( array( 'suppress_filters' => false, ) ); remove_filter( 'posts_where', 'posts_where_guid' );
カスタムフィールド “url” の内容を元に、投稿データの guid にマッチするものを取得しています。
当初は get_posts 関数の引数に「’guid’ => $meta_url,」パラメーターを追加すれば良いと考えていましたが無視されたため、
「get_posts 関数内で作成されるSQL文に検索条件を追記する」
という手法に至りました。
パラメーターに「’suppress_filters’ => false,」とありますが、これが無ければ posts_where フィルターが無視されるのでご注意ください。
カスタムメニュー with カスタムポストタイプ
サイトのメニューをカスタムメニューで実装する場合がほとんどで、カスタムポストタイプのアーカイブをメニューに追加する場合は「カスタムリンク」で作成していました。
通常はこれで問題ないのですが、WP-PageNavi に代表されるページング処理を実装し2ページ目以降を表示するさい、メニューの <li> 要素に「current-menu-item」クラスが追加されなくて困りました。
追加されない原因は、URLが「/custompost/page/2」のようになり、カスタムリンクで登録した「/custompost」とミスマッチが起こるというもので、
「Add Custom Post Types Archive to Nav Menus」
というプラグインをインストールすることで解決しました。
以上、淡々と書いていますが Tips 集なのでご容赦ください。
今後も、こういった小さい内容のものを WordPress に限らず、忘備録代わりの Tips として書いていきます。
次の2012年12月25日は、ラストを締めくくっていただくWEBCRAFTSさんです。
ご参考