WordPressのタイトル入力欄のプレースホルダー「ここにタイトルを入力」を register_post_type で指定する方法

カスタム投稿タイプを利用する場合に、件名の初期値が(プレースホルダーなんて洒落た言い方しますよね。)「ここにタイトルを入力」だと、わかりにくいケースってありませんか?

そうです。こいつです。

title_placeholder-default

このテキストを変更する方法は、enter_title_here というフックを使って、投稿タイプ毎に変更できるようになっています。

参考)
ここにタイトルを入力 を変更する | WordPress

だがしかし!

register_post_type のパラメーターには、うんざりするほど、labels の指定があるのに、このタイトル欄のプレースホルダーの指定がないのは、おじさん納得できません。

というわけで、register_post_type の labels に enter_title_here を指定すれば、プレースホルダーに反映されるようにしてみたいと思います。

“WordPressのタイトル入力欄のプレースホルダー「ここにタイトルを入力」を register_post_type で指定する方法” の続きを読む

WordPressの管理画面とログイン画面にBasic認証を適用する.htaccessの記述

wp-login.php と wp-admin ディレクトリ以下を制限する。ただし、wp-admin/admin-ajax.php は 、プラグインで Ajax を利用する場合にアクセスされる可能性があり、除外する必要がある。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

AuthUserFile	/path/to/.htpasswd
AuthName	"Input Your Name And Password"
AuthType	Basic

<Files wp-login.php>
require	valid-user
</Files>

<FilesMatch "\/?wp-admin">
require	valid-user
</FilesMatch>

<Files wp-admin/admin-ajax.php>
Satisfy any
order allow,deny
allow from all
</Files>

あ、マルチサイトは試してないからね

WordCamp Kobe 2013中に作ったプラグイン「Stop the Bokettch」を公開

WordCamp Kobe 2013 のお昼休みの会話で突然作ることになったプラグイン「Stop the Bokettch」を公開します。
プラグインを有効化していると、表示設定の検索エンジンがサイトをインデックスできないようにするにチェックが入っている場合に、管理バー上にアラート表示がなされます。

stip-the-bokettch

※ 2013.6.18. アップデートしました。
※ 2013.6.26. プラグイン公式ディレクトリで公開しました。

スライドはこちら

WordPress の管理画面にユーザー権限グループに応じた class を出力する

管理画面の body_class に相当する admin_body_class にフィルターフックをかけて、ユーザーの権限グループを含める方法

出力されるソースの修正ができない場合、これを使ってCSSで非表示にすることができますね。
CSSの読み込みは、admin_initなどで、wp_enqueue_style すればオッケー。

admin_body_class で渡されてくるものは文字列形式なので、扱いがちょっとめんどくさいのだけど。

function add_user_role_class( $admin_body_class ) {
	global $current_user;
	if ( ! $admin_body_class ) {
		$admin_body_class .= ' ';
	}
	$admin_body_class .= 'role-' . urlencode( $current_user->roles[0] );
	return $admin_body_class;
}
add_filter( 'admin_body_class', 'add_user_role_class' );

出力結果はこんな感じ

<body class="wp-admin wp-core-ui no-js  role-administrator index-php auto-fold admin-bar branch-3-5 version-3-5 admin-color-fresh locale-ja no-customize-support">

role-administrator で判別可能ですね。

非表示にする以外にもいろんな使い方ができそうな気がするので、こんな方法あるよってーのがあったら こそっと 教えてくださいw

WordPress 3.5 からの新アップローダーでもメディア表示をアップロードしたユーザーのみに限定する

以前投稿した、WordPress のメディア表示をアップロードしたユーザーのみに限定する では、3.5から導入された新アップローダーのメディア表示には対応できていませんでした。これは、新アップローダーが Ajax で動作しているため、先の記事で紹介した条件分岐の is_main_query に合致せず、ユーザーでの限定条件が付加されなかったのが原因です。

新アップローダーの画像取得は、wp-admin/includes/ajax-actions.phpwp_ajax_query_attachments で行われています。
画像の取得自体は、WP_Query を利用しているので、旧バージョンで用いた pre_get_posts でのフックも有効ではありますが、残念な事に、このままだとこの関数によるクエリーかどうかの判別条件が曖昧です。

そこで、この Ajax が動作するときのみ有効となる定数を設定して、それを pre_get_posts の条件に加えることにします。

WordPress の Ajax は、wp-admin/admin-ajax.php にリクエストされ、アクションフックを用いて、実行関数が呼ばれるようになっています。該当箇所のコードは、

CODE 1

add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '_', $_GET['action'] ), 1 );

となっており、画像取得の場合は、wp_ajax_query-attachments というフックが呼ばれます。Ajax の実行関数が呼ばれる優先度は、CODE 1 を見てわかるように 1 となっているので、定数の定義を行うには、これより優先度が高い(数字が少ない)優先度を設定して、早く行わなければなりません。

優先度 0 にて、DOING_QUERY_ATTACHMENT という定数を設定し、この定数の定義の有無により、ユーザーの条件を付加させるためには、

CODE 2

/*
 * メディアの抽出条件にログインユーザーの絞り込み条件を追加する
 */
function display_only_self_uploaded_medias( $wp_query ) {
	if ( is_admin() && ( $wp_query->is_main_query() || ( defined( 'DOING_QUERY_ATTACHMENT' ) && DOING_QUERY_ATTACHMENT ) ) && $wp_query->get( 'post_type' ) == 'attachment' ) {
		$user = wp_get_current_user();
		$wp_query->set( 'author', $user->ID );
	}
}
add_action( 'pre_get_posts', 'display_only_self_uploaded_medias' );


function define_doing_query_attachment_const() {
	if ( ! defined( 'DOING_QUERY_ATTACHMENT' ) ) {
		define( 'DOING_QUERY_ATTACHMENT', true );
	}
}
add_action( 'wp_ajax_query-attachments', 'define_doing_query_attachment_const', 0 );

と、いった感じになります。