bodyのclassにスラッグを入れる

 「このページだけ 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をダウンロードして、間違いを修正してからアップロードすれば元に戻るはず。

簡単なオリジナルテンプレートタグの作り方

使い方は色々ですが、電話番号とかをオリジナルのテンプレートタグにしたり、長ぁ〜いテンプレートタグを短くしてみたり、お問い合わせ一覧出力するテンプレートタグをオリジナルで作れたりします。

まずは簡単に

function.php
[php]
/*でんわ番号 */
fudenction telcode(){
echo ‘TEL:0956-59-8587’;
}
[/php]

出力したいテンプレートに
[html]

<?php telcode();?>

[/html]


TEL:0956-59-8587
と出力されます。

実際に使ってるのがこれ
カスタムフィールドで商品価格のフィールドを作ってテンプレート上で消費税と3桁区切りで表示するコード

function.php

[php]
// 現在の日付を取得
$dt = new DateTime();
$dt->setTimeZone(new DateTimeZone(‘Asia/Tokyo’));
$today = $dt->format(‘Y-m-d H:i:s’);

// 消費税8%の施行日付を設定
$start_day = ‘2014-04-01 00:00:01’;
// 日付を比較
$tax = 1.05;//旧消費税率
if (strtotime($today) >= strtotime($start_day)) {
$tax = 1.08;//新消費税率
}

function fee($fee) {
global $tax;
$fee = $fee*$tax;
$oku = floor($fee / 100000000);
$man = floor(($fee % 100000000) / 10000);
$nokori = ($fee % 100000000) % 10000;
$result = ”;
if ($oku) $result = number_format($oku) . ‘<span class="toYenOku">億<span>’;
if ($man) $result .= number_format($man) . ‘<span class="toYenMan">万</span>’;
if ($nokori) $result .= number_format($nokori);
if($result):
echo ‘<span class="toYen">’.$result.'</span><span class="toYenYen">円</span>’;
endif;
}
[/php]

使いたいテンプレートで
カスタムフィールド item_price を $price として取得 テンプレートタグfree()にいれる
[html]
<?php $price = get_post_meta($post_id, ‘item_price’, $single); ?>
<?php fee($price);?>
[/html]

みたいな感じで桁区切りと消費税計算して表示出来るし、カスタムフィールドのitem_priceは文字列ではなく数値なのでitem_priceの値でソートしてクエリすることも可能。
ついでに、消費税が10%になっても大丈夫!

カスタム投稿タイプのサイドバー

カスタム投稿タイプで

直近の●●件
カテゴリー一覧
月別・年度別アーカイブ

を表示したいとき

  • パーマリンクの設定はデフォルト
  • カスタムポストのカテゴリーはtaxonomy追加で、”カスタムポスト名_cat”

こんな感じのページが出来ます。
http://halu-g.jp/?post_type=report

sidebar.phpとかに

//直近の5件
&lt;ul&gt;
&lt;?php
global $post;
$post_type = get_post_type();
$args = array (
 'post_type' =&gt; $post_type,
 'orderby' =&gt; 'post_date',
 'order' =&gt; 'DESC',
 'numberposts' =&gt; 5
);
$my_posts = get_posts( $args );
foreach ($my_posts as $post) :
 setup_postdata( $post );
?&gt;
&lt;li&gt;&lt;a href="&lt;?php the_permalink();?&gt;"&gt;&lt;?php the_title();?&gt;&lt;/a&gt;&lt;/li&gt;
&lt;?php
endforeach;
wp_reset_postdata();
?&gt;
&lt;/ul&gt;


&lt;p&gt;カテゴリー&lt;/p&gt;
&lt;ul&gt;
&lt;?php wp_list_categories(array('title_li'=&gt;'', 'taxonomy'=&gt;$post_type.'_cat', 'show_count'=&gt;1)); ?&gt;
&lt;/ul&gt;

&lt;p&gt;月別アーカイブ&lt;/p&gt;
&lt;ul&gt;
&lt;?php
 add_filter( 'getarchives_where', 'my_getarchives_where', 10, 2 );
 add_filter( 'get_archives_link', 'my_get_archives_link', 10, 2 );

//直近の12ヶ月分
$my_archive = wp_get_archives('type=monthly&amp;post_type='.$post_type.'&amp;show_post_count=1&amp;limit=12&amp;echo=0');
//年と月を別のフォーマットにかえたいとき利用
//$my_archive = str_replace( array("年"), '.', $my_archive );
//$my_archive = str_replace( array("月"), '', $my_archive );

echo $my_archive;
?&gt;
&lt;/ul&gt;

&lt;p&gt;年間アーカイブ&lt;/p&gt;
&lt;ul&gt;
&lt;?php
echo wp_get_archives('type=yearly&amp;post_type='.$post_type.'&amp;show_post_count=1');
remove_filter( 'getarchives_where', 'my_getarchives_where');
remove_filter( 'get_archives_link', 'my_get_archives_link' );
?&gt;
&lt;/ul&gt;

</pre><p><br />function.php</p><pre>//++++++++++++++++++++++++++++++++++++++++++++++
//カスタム投稿のアーカイブ
//
function my_getarchives_where( $where, $r ) {
 global $my_archives_post_type;
  $my_archives_post_type =get_post_type();
$my_archives_post_type = get_post_type();
 if ( isset($r['post_type']) ) {
 $my_archives_post_type = $r['post_type'];
 $where = str_replace( '\'post\'', '\'' . $r['post_type'] . '\'', $where );
 }
 return $where;
}
 
//
// ?post_type=任意の名前(パラメーター) を追加する
//
function my_get_archives_link( $link_html ) {
 global $my_archives_post_type;
 $my_archives_post_type = get_post_type();
if ($my_archives_post_type != '') {
 $add_link = '&amp;post_type=' . $my_archives_post_type;
 $link_html = preg_replace('@&lt;/a&gt;(.+?)&lt;/li&gt;@', '年&lt;/a&gt;$1&lt;/li&gt;', $link_html);
 }
 return $link_html ;
}

get_posts() と get_pages() を使い分ける

投稿を抽出するのは、get_posts() 

ページを抽出するのは、get_pages()

それぞれに特化した関数という説明が多いのですが、何が違うのか、まとめてみました。

使用例:カスタムポスト news を

    $args = array( 
        'order' => 'DESC', 
        'post_type' => array('news'),
      );
$posts_array = get_post($args);
 var_dump($posts_array);

$pages_array = get_pages($args);
 var_dump($pages_array);

 

dumpされて帰ってくるのは

get_post() get_pages()
[“ID”] [“ID”]
[“post_author”] [“post_author”]
[“post_date”] [“post_date”]
[“post_date_gmt”] [“post_date_gmt”]
[“post_content”] [“post_content”]
[“post_title”] [“post_title”]
[“post_excerpt”] [“post_excerpt”]
[“post_status”] [“post_status”]
[“comment_status”] [“comment_status”]
[“ping_status”] [“ping_status”]
[“post_password”] [“post_password”]
[“post_name”] [“post_name”]
[“to_ping”] [“to_ping”]
[“pinged”] [“pinged”]
[“post_modified”] [“post_modified”]
[“post_modified_gmt”] [“post_modified_gmt”]
[“post_content_filtered”] [“post_content_filtered”]
[“post_parent”] [“post_parent”]
  [“guid”]
[“menu_order”] [“menu_order”]
[“post_type”] [“post_type”]
[“post_mime_type”] [“post_mime_type”]
[“comment_count”] [“comment_count”]
[“filter”] [“filter”]

ということでほぼ同じ

で、 使えるフィルターは、

get_post() get_pages()
posts_per_page  child_of
offset sort_order
category sort_column
orderby hierarchical
order exclude
include include
exclude  
meta_key meta_key
meta_value meta_value
post_type authors
post_mime_type parent
post_parent exclude_tree
post_status number
suppress_filters offset
  post_type
  post_status

コレを比較すれば、

まぁ、何が特化されているのかがわかりやすい。

 

get_posts() – 投稿をフィルターすることに特化した関数
get_pages() – ページタイプをフィルターすることに特化した関数

ということでした。

 

px → rem 変換表

  14px基準 16px基準
8px 0.571428571rem 0.5rem 
10px 0.714285714rem 0.625rem 
11px 0.785714286rem  0.6875rem
12px 0.857142857rem 0.750rem
13px 0.928571429rem 0.8125rem
14px 1rem 0.875rem
15px 1.071428571rem 0.9375rem
16px 1.142857143rem 1rem
18px 1.285714286rem 1.125rem
20px 1.428571429rem 1.25rem
21px 1.5rem 1.3125
22px 1.571428571rem 1.375rem
24px 1.714285714rem 1.5rem
28px 2rem 1.75rem
30px    
32px 2.285714285rem 2rem
     
36px 2.571428571rem 2.25rem 
38px 2.714285714rem 2.375rem 
39px 2.7857142857rem  2.4375rem
40px 2.857142857rem  2.5rem

日本語は、16px基準の方が見やすいのでは?と思ったりします。