blog
WordPress「画像の編集」のエラーについて ≪解決済み≫
現在一部のお客様のサイトにて、アップロードした画像を、編集する機能が正常に作動しないため、縦横を変更したり、トリミングしたりすることが出来ません。
自動バックアップに使用しているプログラムの修正に伴う弊害です。
現在調査中ですが、「自動バックアップ」と「画像の編集」のどちらか一方だけであれば機能しますのでご連絡ください。現状は、バックアップを優先しています。
*********************
詳しい説明はこちら
*********************
バックアッププラグイン「BackWPup」のバックアップ先をDropBoxにしている場合、
SSLチェックのエラーが発生するため、WordPressのサポートフォーラムに掲載されている
などの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]
この空白はなんですか?
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をダウンロードして、間違いを修正してからアップロードすれば元に戻るはず。
簡単なオリジナルテンプレートタグの作り方
カスタム投稿タイプのサイドバー
カスタム投稿タイプで
直近の●●件
カテゴリー一覧
月別・年度別アーカイブ
を表示したいとき
- パーマリンクの設定はデフォルト
- カスタムポストのカテゴリーはtaxonomy追加で、”カスタムポスト名_cat”
こんな感じのページが出来ます。
http://halu-g.jp/?post_type=report
sidebar.phpとかに
//直近の5件 <ul> <?php global $post; $post_type = get_post_type(); $args = array ( 'post_type' => $post_type, 'orderby' => 'post_date', 'order' => 'DESC', 'numberposts' => 5 ); $my_posts = get_posts( $args ); foreach ($my_posts as $post) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink();?>"><?php the_title();?></a></li> <?php endforeach; wp_reset_postdata(); ?> </ul> <p>カテゴリー</p> <ul> <?php wp_list_categories(array('title_li'=>'', 'taxonomy'=>$post_type.'_cat', 'show_count'=>1)); ?> </ul> <p>月別アーカイブ</p> <ul> <?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&post_type='.$post_type.'&show_post_count=1&limit=12&echo=0'); //年と月を別のフォーマットにかえたいとき利用 //$my_archive = str_replace( array("年"), '.', $my_archive ); //$my_archive = str_replace( array("月"), '', $my_archive ); echo $my_archive; ?> </ul> <p>年間アーカイブ</p> <ul> <?php echo wp_get_archives('type=yearly&post_type='.$post_type.'&show_post_count=1'); remove_filter( 'getarchives_where', 'my_getarchives_where'); remove_filter( 'get_archives_link', 'my_get_archives_link' ); ?> </ul> </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 = '&post_type=' . $my_archives_post_type; $link_html = preg_replace('@</a>(.+?)</li>@', '年</a>$1</li>', $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
評価★は・・・無星ですが・・・使えそうです。
プラグインをインストールしたら、プラグイン一覧のページから
Settings をクリックすると、設定画面が開きます(通常のメディアの設定画面でも可)。
通常の項目の下に、あたらしくAdvanced uploaderの設定画面が追加されていますので
その中から
Replace Default Uploader に ✓ チェックを入れます。
あとは、画像の時と同じように、アップロードして、投稿に挿入。
投稿に挿入時に、挿入ボタンの上にATTACHMENT IMAGE というセレクトボックスが追加されているので、画像のサイズを選択。
この投稿のキャプチャ画面もアクロバットでキャプチャしたPDFファイルをそのまま、アップロードしてみました。
コレは使える!!
追記
生成されるthumbnailのサイズがおかしくなります。
指定した大きさで切り抜く、ハードクロップの指定が効かない模様。
全てのサイズがソフトクロップになってしまいます。
プラグインを有効にしておいて、PDFのアップロード時のみに適用した方が良さそうです。(アップロード時にどちらのアップローダーを使うかを選択できます。)
WordPressで公開終了日時の予約
WordPressは予約投稿はできても、公開終了日時を設定することはできない。
以前からいろいろ試してたんですが良い仕組みを思いつかないでいましたが、
カスタムフィールドで「公開終了予定時間」というフィールドを作って、表示する際に、現在時間と公開終了予定時間を比較してクエリーで除外すればよいのでは?
ということでやってみました。
本当は、投稿のステータスを「publish」から「draft」に変更するのがベストなんだと思うけど、この方法だと、使い方次第で、「このイベントは終了しました」なんて表示に切り替えたりも可能かと思います。
これで、大晦日の年度またぎの更新や、真夜中の更新作業ともおさらばできそうです(^^ゞ
詳細は、組み込み予定のサイトがオープンしてから公開しましょう!