「このページだけ h3要素は別の色」とかページによって背景の色を変えたいとか
bodyに標準で追加されるクラスは、投稿やページの番号を使用するので、サーバー移行時など、ポストの番号が変更になる恐れがあるときは使えないのですが、ページネームいわゆる「スラッグ」を使えばユニークなクラスを追加することが出来ます。
ただ、日本語でタイトルをつける場合は、スラッグは・・・そこで、スラッグ名を自動で英数字に変換時し、変換したスラッグ名を自動でbodyのクラスに追加すれば投稿やページ毎にユニークなクラス名をつけることが出来ます。
function.php
//スラッグを日本語からポストタイプとポストIDを使った英数字に変換
function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
$slug = 'slug-'.utf8_uri_encode( $post_type ) . '-' . $post_ID;
}
return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4 );
//bodyのクラスにスラッグを入れる
function add_pagename_class($classes = '') {
global $post;
if (is_page()) {
$page = get_page(get_the_ID());
$classes[] = $page->post_name;
}
return $classes;
}add_filter('body_class','add_pagename_class');
ちなみに、ちょっと変更すればいろいろなモノを追加できることが分かります。
//bodyのクラスに親のスラッグを入れる
function add_ancestor_class($classes) {
global $post;
if (is_page() && (!is_front_page()) ){
if($post->ancestors){
foreach($post->ancestors as $post_ancestor_id){
$post_id = $post_ancestor_id;
}
} else {
$post_id = $post->ID;
}
$ancestor_post = get_page($post_id);
$ancestorSlug = $ancestor_post->post_name;
$classes[] = 'ancestor_'.$ancestorSlug;
}
return $classes;
}
add_filter('body_class','add_ancestor_class');
//bodyのクラスにtaxonomyのスラッグを入れる
function add_taxonomy_class( $classes ){
if( is_singular() )
{
$custom_terms = get_the_terms(0, 'display');
if ($custom_terms) {
foreach ($custom_terms as $custom_term) {
$classes[] = 'tax_' . $custom_term->slug;
}
}
}
return $classes;
}
add_filter('body_class','add_taxonomy_class');
すべてfunction.phpを変更するので自己責任でお願いします。
もし更新後に「真っ白」になってしまったら慌てず、
FTPでfanction.phpをダウンロードして、間違いを修正してからアップロードすれば元に戻るはず。