年別アーカイブ: 2014年

WordPressはGPL

 

便利に活用させてもらっている

 TinyMCE Clear

というプラグインがエラーをはいていたので修正したいと思い、ライセンスについて調べていたら、WordPress本体に関する興味深い記事を発見。

WP−D http://wp-d.org/2012/11/07/1046/

WordPressはGPLライセンスです・・・と。

GPLライセンスで頒布されているプログラムは、それを受け取った者が、修正を加えてもいいし、他のプログラムに組み込んでもいいし、自由に改変できる。ただ、それを再頒布する場合は、それを受け取った者も同じように自由に改変できる権利を持つということ。

 

WordPressを使ってたくさんのサイトを制作していますが、基本的には、WordPress本体や、プラグイン改変していません。それは、アップデートの対応が大変だから。でも、開発が終わっているようなプラグインで使い勝手の良いモノは、修正やカスタマイズして使っています。

ご要望があれば、再頒布も可能なので、ご相談ください。

 

で、このプラグインのエラーの原因は、簡単に直るんですけどね。

 

Category Checklist Tree

WordPressの微妙に不便なところを解消してくれる数々のプラグインの中から、
企業向けWordPressカスタマイズサイトの制作過程で、本当に役に立ったモノをご紹介!

投稿を保存すると、チェックを入れたカテゴリーが一番先頭に表示され、順番が変わってしまうんです。
これって、不自然ですよねぇ〜。
しかも、カテゴリーを階層化しているても、階層化を無視して、チェックを入れたカテゴリーを一番上に持ってきます。

コレを解消してくれるのが

Category Checklist Tree

使い方は、プラグインをインストールして有効化するだけ。
設定することは何もありません。

これで、どのカテゴリーを選んでも、開いたときと同じ順番、同じ階層を保って表示してくれます。



=== Category Checklist Tree ===
Contributors: scribu
Tags: admin, ui, categories, hierarchy
Requires at least: 3.4
Tested up to: 3.7
Stable tag: 1.3.2
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

WordPress「画像の編集」のエラーについて ≪解決済み≫

現在一部のお客様のサイトにて、

アップロードした画像を、編集する機能が正常に作動しないため、縦横を変更したり、トリミングしたりすることが出来ません。

error

自動バックアップに使用しているプログラムの修正に伴う弊害です。
現在調査中ですが、「自動バックアップ」と「画像の編集」のどちらか一方だけであれば機能しますのでご連絡ください。現状は、バックアップを優先しています。

 

*********************
詳しい説明はこちら
*********************

バックアッププラグイン「BackWPup」のバックアップ先をDropBoxにしている場合、
SSLチェックのエラーが発生するため、WordPressのサポートフォーラムに掲載されている

BackWPup disable SSL connection verifying
https://wordpress.org/support/topic/error-dropbox-api-59-unknown-cipher-in-list

などのfixで対応している方も多いと思います。
ただ、このfixを適用すると、WordPressの機能の一つである、アップロードした画像ファイルの編集機能が使用できなくなります。
詳細は調査中です。

*********************
追記 2014.10.25
*********************

このfixの途中で一つcodeが紹介されていますが、新しく正常に動くcodeが紹介されていますね。こちらを使用すれば解決できます。

[php]
<?php
/**
* Plugin Name: BackWPup disable SSL connection verifying
* Plugin URI: https://marketpress.com/
* Description: Disables the verifying from SSL connections in backup destinations
* Author: Inpsyde GmbH
* Author URI: http://inpsyde.com
* Version: 0.1
* Network: true
* License: GPLv3
* License URI: http://www.gnu.org/licenses/gpl-3.0
*/

add_filter( ‘backwpup_cacert_bundle’, ‘backwpup_disable_ssl_verify’ );
function backwpup_disable_ssl_verify ( $file ) {

return FALSE;
}

[/php]

この空白はなんですか?

flash1

ちまたの、「ちょっとおしゃれな人たち」の保有率が格段に高いiPhoneやiPad。

9月9日には新らしい端末が発表されると噂のiPhoneですが、
クロッキーワークスでも、初心者の方にオススメしているのはiPadやiPhone。
ただ、iPhoneは高齢の方には小さすぎる・・・

今回の発表で、少し大型のものが出ると噂なので、期待大!!

そんな、iPhoneとiPadですが、欠点は標準でFlashを使ったサイトが見えないこと。

パソコンでは、見えているスライドショーやメニュー、アニメーションなどが、単なる

「空白」

 なんです。不自然なスペースが空いているだけ。

これはもったいない。

是非ともそのサイト非Flash化のお手伝いさせてください!

・Flash部分のみの差し替え
・いっそのこと、スマートフォン・タブレットの専用サイトの開設
・サイトフルリニューアルで、いろいろな端末からも見えるようにリニューアル

など、様々なご提案をご用意しております。
お気軽にお問い合せください。

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基準の方が見やすいのでは?と思ったりします。

アップロードした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のアップロード時のみに適用した方が良さそうです。(アップロード時にどちらのアップローダーを使うかを選択できます。)