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
offsetsort_order
categorysort_column
orderbyhierarchical
orderexclude
includeinclude
exclude 
meta_keymeta_key
meta_valuemeta_value
post_typeauthors
post_mime_typeparent
post_parentexclude_tree
post_statusnumber
suppress_filtersoffset
 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基準の方が見やすいのでは?と思ったりします。

アップロードしたPDFの画像化

※追記有り

いつも面倒なPDFファイルの画像化。

WordPressでPDFをアップロードしたときにサムネイル画像を自動的に作ってくれればいいのになぁと思ってました。

サーバーサイドに何か組み込めば出来るんだろうとは思っていたのですが、自分で試行錯誤する前に、プラグインを探してみました。

Advanced uploader

 20140710-1

評価★は・・・無星ですが・・・使えそうです。

 

プラグインをインストールしたら、プラグイン一覧のページから

20140710-2

Settings をクリックすると、設定画面が開きます(通常のメディアの設定画面でも可)。

通常の項目の下に、あたらしくAdvanced uploaderの設定画面が追加されていますので

その中から

Replace Default Uploader に ✓ チェックを入れます。

20140710-3(この画像は、mediumサイズにしてみました。)

あとは、画像の時と同じように、アップロードして、投稿に挿入。

20140710-4投稿に挿入時に、挿入ボタンの上にATTACHMENT IMAGE というセレクトボックスが追加されているので、画像のサイズを選択。

この投稿のキャプチャ画面もアクロバットでキャプチャしたPDFファイルをそのまま、アップロードしてみました。

コレは使える!!

 

追記

生成されるthumbnailのサイズがおかしくなります。

指定した大きさで切り抜く、ハードクロップの指定が効かない模様。
全てのサイズがソフトクロップになってしまいます。

プラグインを有効にしておいて、PDFのアップロード時のみに適用した方が良さそうです。(アップロード時にどちらのアップローダーを使うかを選択できます。)

 

 

WordPressで公開終了日時の予約

WordPressは予約投稿はできても、公開終了日時を設定することはできない。

以前からいろいろ試してたんですが良い仕組みを思いつかないでいましたが、

カスタムフィールドで「公開終了予定時間」というフィールドを作って、表示する際に、現在時間と公開終了予定時間を比較してクエリーで除外すればよいのでは?

ということでやってみました。

20140701更新ネタ

本当は、投稿のステータスを「publish」から「draft」に変更するのがベストなんだと思うけど、この方法だと、使い方次第で、「このイベントは終了しました」なんて表示に切り替えたりも可能かと思います。

これで、大晦日の年度またぎの更新や、真夜中の更新作業ともおさらばできそうです(^^ゞ

詳細は、組み込み予定のサイトがオープンしてから公開しましょう!

HOME