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 );
	}
}

WordPress3.9 でビジュアルエディターのブロック要素をカスタマイズする

3.8までは、配列のキー名が theme_advanced_blockformats でしたが、3.9からは、block_formats になり、指定の仕方も単なるカンマ区切りから、表示名=タグ という指定となり、セミコロン区切りに変わっています。
※ 指定値の最後にはセミコロンは不要です。

function custom_editor_settings( $initArray ) {
	$initArray['block_formats'] = 'Paragraph=p;Address=address;Pre=pre;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6';
	return $initArray;
}
add_filter( 'tiny_mce_before_init', 'custom_editor_settings' );

wp39-tinymce-block_formats

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>

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

管理画面でジェネリコン(Genericons)を使ってみる #wpacja2013

    WordPress Advent Calendar 2013 も残すところあと僅か、しまっていきますぞ。

    bokettch-title

    ごく一部で多大な人気を誇る?プラグイン「Stop the Bokettch」ですが、レスポンシブ化され、メニューやツールバーのアイコンもWebフォント化された WordPress 3.8 では、ツールバーに表示されるべき画像アイコンが表示されず、ちょっとおまぬけな表示になってしまっていました。さらに、1px はみ出てるし。。(まさにぼけっち)

    old-tool-bar-in-bokettch

    また、モバイル端末の画面幅だとアイコン自体も非表示となってしまうことに。。

    old-mobile-admin-bar

    このままでは、さすがに情けないので、ようやく重い腰をあげて WordPress 3.8 に対応することにしたのでした。

    3.8 でアイコンが表示されないという情報は、前から得ていたので Webフォントで使えそうなものがないか探していたのですが、ジェネリコン(Genericons)に、ちょうどよいのがあったので、これを使うことに。
    ※ Genericons は、WordPress.com の運営元でもある Automattic が開発しているアイコンフォントで、デフォルトテーマの Twenty Thirteen や Twenty Fourteen でも採用されています。

    genericons-sample

    参考にしたのは、以下の2記事

    まずは、Genericons を表示できるようにフォントを読み込まなければなりません。が、これは結構簡単で、ダウンロードした Genericons に含まれている genericons.css を読み込むだけで大丈夫です。さらに、wp_enqueue_style を使っておけば、他のプラグインなどで同じCSSを利用する場合でも、重複して読み込んでしまうことを避けることができます。

    wp_enqueue_style( 'genericons', $this->genericons_dir_url . 'genericons.css', array(), '3.0.2' );
    

    CSS が読み込めたら、他のツールバーで表示されているアイコンを参考にCSSの指定を追加していきます。Genericons のサイトで表示したいアイコンをクリックして、「Copy CSS」をクリックすると、CSSで指定すべきコードをコピーすることができるようになっているので、これを利用するのが便利です。

    copy-css

    font-family プロパティで Genericons を指定し、さらにアイコンの表示位置やサイズを調整して完成。

    #wpadminbar #wp-admin-bar-bokettch-notice .ab-icon:before {
    	font-family: 'Genericons';
    	content: '\f446';
    	color: white;
    	font-size: 1.2em;
    	top: 1px;
    }
    

    さらに、モバイル端末でも表示されるようにメディアクエリーの指定を追加

    @media screen and (max-width: 782px) {
    	#wp-toolbar > ul > li#wp-admin-bar-bokettch-notice {
    		display:inline;
    	}
    	#wpadminbar #wp-admin-bar-bokettch-notice .ab-icon:before {
    		font-size: 1em;
    		top: 4px;
    	}
    }
    

    WordPress 3.7 以前では、元と同じ表示されるようにしたかったので、まずは、バージョン判別用の関数を作成

    private function is_admin_responsive() {
    	return version_compare( '3.8.*', get_bloginfo( 'version' ), '<=' );
    }
    

    最終的に、この条件分岐タグを使って、genericons.css の読み込みと、吐き出すCSSをバージョンによって変更するようにしています。詳しくは、ソース嫁

    修正後のツールバーの表示は、こんな感じ。

    updated-adminbar

    アップデートした Stop the Bokettch のダウンロードは、公式ディレクトリからどうぞ。

    こんな形で、プラグインのメンテナンスはそれなりに面倒なときもあったりしますが、自分の興味が尽きない限り続けていきたいと思います。そして、同じように地道にメンテを続けているプラグインの作者さんたちにも惜しみない賛辞を。

    さて、あとアップデートすべきプラグインの数は。。。

    orz

    明日の WordPress Advent Calendar 2013 は、Stop the Bokettch プラグインのタイトルにもなったぼけっちこと、うぇぶるじょんさんが、読まなければ損するとってもお役に立つ内容をお送りするぞ!?

カテゴリーのパーマリンクをカテゴリーIDにするよ

今回はコードだけ。

function numeric_category_rewrite_rules( $rules ) {
	$custom_rules = array();
	foreach ( $rules as $regex => $rewrite ) {
		$regex = str_replace( '/(.+?)/', '/([0-9]{1,})/', $regex );
		$rewrite = str_replace( '?category_name=', '?cat=', $rewrite );
		$custom_rules[$regex] = $rewrite;
	}
	return $custom_rules;
}
add_filter( 'category_rewrite_rules', 'numeric_category_rewrite_rules' );


function numeric_category_link( $category_link, $term_id ) {
	global $wp_rewrite;
	if ( $wp_rewrite->using_permalinks() ) {
		$permastruct = $wp_rewrite->get_extra_permastruct( 'category' );
		$permastruct = str_replace( '%category%', $term_id, $permastruct );
		$category_link = home_url( user_trailingslashit( $permastruct, 'category' ) );
	}
	return $category_link;
}
add_filter( 'category_link', 'numeric_category_link', 10, 2 );

パーマリンク設定のページ行って、リライトルールの再構成してね(はぁと