StaticPress でリンク切れの場合はファイルを作らないようにする

一旦、空のファイルを作って、直後に消すようにするという方法です。

add_filter( 'StaticPress::put_content', 'empty_404_content', 10, 2 );
add_action( 'StaticPress::file_put'   , 'unlink_empty_static_file' );
function empty_404_content( $content, $code ) {
	if ( $code == 404 ) {
		$content = '';
	}
	return $content;
}


function unlink_empty_static_file( $file_dest ) {
	if ( file_exists( $file_dest ) && is_file( $file_dest ) && filesize( $file_dest ) === 0 && is_writable( $file_dest ) ) {
		unlink( $file_dest );
	}
}

WordPress の新規追加の権限を切り分けてみる

はい、どーも。

ユーザーに、既存記事の編集などはさせたいけれども、新規追加はさせたくない、例えば、編集者権限で記事の追加を行い、投稿者で編集のみを担当させるなんて場合に使える、いつ使うかわからないようなニッチな内容を紹介します。

“WordPress の新規追加の権限を切り分けてみる” の続きを読む

投稿の個別ページのみパーマリンクを変更する方法

WordPress で投稿のURLは、 /article/%postname%/ とか /blog/%post_id%/ にしたいけど、パーマリンク設定で article や blog といったディレクトリを入れてしまうと、カテゴリーやアーカイブの表示でも、このディレクトリが付いてしまってかっこ悪いですよね。

今回は、このちょっとしたモヤモヤを解消するべく、投稿の詳細表示の時のみ特定のディレクトリを追加する方法を紹介します。

“投稿の個別ページのみパーマリンクを変更する方法” の続きを読む

WordPressで特定の関数から呼ばれたときだけフックをかける裏技!?

フォーラムの 「カテゴリのよく使うものを削除」の回答にて使ったものなのだけど、特定の関数から呼ばれたときだけフックさせたい時ってありませんか?私は結構あります。

自作のプラグインとか、テーマであれば、直前に add_filter して、直後に remove_filter することも出来ますが、コアファイルや配布されているプラグイン・テーマだとそうもいかないですよね。

そんなにっちもさっちも行かないようなケースの場合、php の debug_backtrace 関数を使って、呼び出し元に特定の関数名が存在しているかのチェックを行えばなんとかなるということに気がつきました。

ただし、本来デバッグ用のものですから、こういうことに用いていいのかどうかはわかりません(爆
※ 詳しい方コメントください。

function exclude_default_category_from_popular_list( $args, $taxonomies ) {
	if ( in_array( 'category', $taxonomies ) ) {
	$traces = debug_backtrace(); // 呼び出し元を取得する
		foreach ( $traces as $trace ) {
			// 関数名を照合
			if ( isset( $trace['function'] ) && $trace['function'] == 'wp_popular_terms_checklist' ) {
				// get_terms の引数に、デフォルトカテゴリーの除外を追加
				$args['exclude'] = array( get_option( 'default_category' ) );
				// 合致したらループをその場で抜ける
				break;
			}
		}
	}
	return $args;
}
add_filter( 'get_terms_args', 'exclude_default_category_from_popular_list', 10, 2 );

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