WordPress: Tips集

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さんです。

 

ご参考