サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
www.warna.info
WordpPress Advent Calendar 2015 6日目の記事になります。 何を書こうか色々と迷ったのですが、フォーラムの質問やSNSなどを見ていると、まだまだPHPのエラーメッセージが何を伝えているかを見ていない人が多いと感じたので、啓発の意味も込めてエラーメッセージについて書いてみることにしました。(WordPressというより単なるPHPの話になっている気がしますが、デザイナーさんとかブロガーさんとか、必要だと思われる人が多い気がするのでよしとしてください。 WordPressは、至極当たり前ながらPHPで動作していますね。テンプレートだけだと、HTMLも混ざっているので、あまり感じられないかもしれませんが、index.phpから始まって、処理が全て完了するまで、全てPHP上で動作しています。そして、PHPのお作法上間違っていたりすると、その間違っている箇所で処理が止ま
なんとも時が経つのは早いもので、ちょっとほっておいたら、ほぼ1年ぶりの更新になってしまいました。 つい先日、コードを見ていて気がついたのですが、メディアの一覧を取得する関数 wp_ajax_query_attachments に WordPress 3.7 から、ajax_query_attachments_args フィルターが追加されていることに気がつきました。(遅 /** * Filter the arguments passed to WP_Query during an AJAX * call for querying attachments. * * @since 3.7.0 * * @see WP_Query::parse_query() * * @param array $query An array of query variables. */ $query = appl
カスタム投稿タイプを利用する場合に、件名の初期値が(プレースホルダーなんて洒落た言い方しますよね。)「ここにタイトルを入力」だと、わかりにくいケースってありませんか? そうです。こいつです。 このテキストを変更する方法は、enter_title_here というフックを使って、投稿タイプ毎に変更できるようになっています。 参考) ここにタイトルを入力 を変更する | WordPress だがしかし! register_post_type のパラメーターには、うんざりするほど、labels の指定があるのに、このタイトル欄のプレースホルダーの指定がないのは、おじさん納得できません。 というわけで、register_post_type の labels に enter_title_here を指定すれば、プレースホルダーに反映されるようにしてみたいと思います。 お手軽なことに、labels の
某環境にて、テストで WordPress 4.0(ベータ版)をインストールしてみたのですが、最初の言語選択で日本語を選んだ場合、本来なら と日本語表示になるのに と英語のままとなってしまう現象がありました。 この原因を探っていったところ、ファイルのダウンロードが有効かどうかを調べるチェックの過程で実行される get_filesystem_method が原因であることが分かりました。 具体的には、問題なく動作する環境では、この関数の返り値が direct であるのに対し、失敗する環境では、ftpext が返ってきます。 この違いは、関数内の以下のコードによります。 $context = trailingslashit($context); $temp_file_name = $context . 'temp-write-test-' . time(); $temp_handle = @fo
wp-login.php と wp-admin ディレクトリ以下を制限する。ただし、wp-admin/admin-ajax.php は 、プラグインで Ajax を利用する場合にアクセスされる可能性があり、除外する必要がある。 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress AuthUserFile /path/to/.htpasswd AuthName "Input Your
WordPress Advent Calendar 2013 も残すところあと僅か、しまっていきますぞ。 ごく一部で多大な人気を誇る?プラグイン「Stop the Bokettch」ですが、レスポンシブ化され、メニューやツールバーのアイコンもWebフォント化された WordPress 3.8 では、ツールバーに表示されるべき画像アイコンが表示されず、ちょっとおまぬけな表示になってしまっていました。さらに、1px はみ出てるし。。(まさにぼけっち) また、モバイル端末の画面幅だとアイコン自体も非表示となってしまうことに。。 このままでは、さすがに情けないので、ようやく重い腰をあげて WordPress 3.8 に対応することにしたのでした。 3.8 でアイコンが表示されないという情報は、前から得ていたので Webフォントで使えそうなものがないか探していたのですが、ジェネリコン(Generic
今回はコードだけ。 function numeric_category_rewrite_rules( $rules ) { $custom_rules = array(); foreach ( $rules as $regex => $rewrite ) { $regex = str_replace( '/(.+?)/', '/([0-9]{1,})/', $regex ); $rewrite = str_replace( '?category_name=', '?cat=', $rewrite ); $custom_rules[$regex] = $rewrite; } return $custom_rules; } add_filter( 'category_rewrite_rules', 'numeric_category_rewrite_rules' ); function num
WP Post Branches という便利なプラグインをご存じでしょうか。公開済みの投稿などの下書きの複製を作成し、公開記事には影響せずに下書き状態での更新や予約投稿機能を使って、時限更新ができるという優れもので、私も度々愛用しています。 ただし、ご覧のようにまだプラグインのヘッダー画像がないので、我こそはと思われる方は、ぜひ確認ちゃんに、いきなり送りつけてあげてください。素材がないよという方は、ここらへんをご自由に使っていただいて構いません。 ちなみに、WP Post Branches の仕組みを簡単に説明すると 公開済みの投稿を複製し下書き状態の投稿(ブランチ)を作る 公開中の投稿はそのままの状態で、ブランチを編集 ブランチの公開時に、ブランチの内容を元の投稿にマージし、ブランチは削除 といった感じとなります。 固定ページを更新するような場合には、非常に便利なのですが、現バージョン(
はい、どーも。 ユーザーに、既存記事の編集などはさせたいけれども、新規追加はさせたくない、例えば、編集者権限で記事の追加を行い、投稿者で編集のみを担当させるなんて場合に使える、いつ使うかわからないようなニッチな内容を紹介します。 と、いいつつ、この実現方法は、CODEX にも載ってないため、正式な仕様として扱っていいのか分かりません。 利用するときは自己責任でお願いいしますね。 var_dump( get_post_type_object( 'post' ) ); などとして、投稿のオブジェクトを表示すると、cap プロパティに create_posts というプロパティが存在しているのが分かります。 ["cap"]=> object(stdClass)#1932 (15) { ["edit_post"]=> string(9) "edit_post" ["read_post"]=> st
WordPress で投稿のURLは、 /article/%postname%/ とか /blog/%post_id%/ にしたいけど、パーマリンク設定で article や blog といったディレクトリを入れてしまうと、カテゴリーやアーカイブの表示でも、このディレクトリが付いてしまってかっこ悪いですよね。 今回は、このちょっとしたモヤモヤを解消するべく、投稿の詳細表示の時のみ特定のディレクトリを追加する方法を紹介します。 投稿詳細ページのパーマリンクを変えるには、リンクを出力する時と、アクセスされた際に条件を判定するリライトルールの作成時の二箇所にフックをする必要があります。 前者は、pre_post_link と言うフィルターフックを利用します。このフィルターフックは、get_permalink 関数内に存在し、パーマリンク設定の内容をフィルタリングすることができます。ここで、ディレ
[WordPress] アイキャッチ画像の色を取得して背景色に設定する の「画像の指定座標の色を取得する」の部分がURLになってしまっていて、httpリクエストが発生してしまうことになるので、内部パスで取る方法。 $thumbnail_id = get_post_thumbnail_id($post->ID); $thumbnail_id = 18; $dirpath = wp_upload_dir(); $image = image_get_intermediate_size( $thumbnail_id, 'post-thumbnail' ); $image_path = $dirpath['basedir'] . '/' . $image['path']; switch ( $image['mime-type'] ) { case 'image/jpeg' : $image_reso
公開されている 3.6 ベータ3の中から、プラグインやテーマをを作るときに使えそうな WordPress 関数を7個ほど拾い集めてみました。詳細は、リンク先の CODEX を見てもらうとして(まだページしかない関数もありますが)、ざっくりと機能とフックの有無などを紹介しておきます。 shortcode_exists パラメーターで指定されたショートコードタグが定義されているか判別する。 フック なし 記述例 <?php if ( shortcode_exists( 'my_shortcode' ) ) : ?> my_shortcode というショートコードが定義されているか判定する。 has_shortcode パラメーターで指定されたショートコードタグが、検索対象文字列に存在するかどうか判定する。 フック なし 記述例 <?php if ( has_shortcode( $post->
WordPress には、先頭に固定表示の機能もありますが、1ページ目の最初にモリッと差し込まれるので、表示件数が変わってしまったり、ページ送りにも対応できません。 これを、カスタム分類を用いて、 該当分類に属するものを、home 表示の際に優先表示 1ページの表示投稿数は、設定通りにする 先頭固定表示の記事のあとは、それ以外の記事を最新順に ページ送り・ページナビに影響がでないこと を満たすものを作ってみました。 具体的には、news というカスタム分類で、sticky という分類に属する投稿を先頭表示されるようにしています。 また、些細な工夫として、複数箇所から呼ばれる get_custom_sticky_posts で、wp_cache_set と wp_cache_get を使っています。これを使うと、実行結果がメモリ上にキャッシュされるため、複数回呼ばれるような場面においても、パ
http://ja.forums.wordpress.org/topic/15002 への回答例として 他ユーザーの投稿を編集する権限がない場合に、一覧表示から他ユーザーの記事を除外してしまう方法 function exclude_other_posts( $wp_query ) { if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) { $post_type = get_post_type_object( $_REQUEST['post_type'] ); $cap_type = $post_type->cap->edit_other_posts; } else { $cap_type = 'edit_others_posts'; } if ( is_admin() &&
以前投稿した、WordPress のメディア表示をアップロードしたユーザーのみに限定する では、3.5から導入された新アップローダーのメディア表示には対応できていませんでした。これは、新アップローダーが Ajax で動作しているため、先の記事で紹介した条件分岐の is_main_query に合致せず、ユーザーでの限定条件が付加されなかったのが原因です。 新アップローダーの画像取得は、wp-admin/includes/ajax-actions.php の wp_ajax_query_attachments で行われています。 画像の取得自体は、WP_Query を利用しているので、旧バージョンで用いた pre_get_posts でのフックも有効ではありますが、残念な事に、このままだとこの関数によるクエリーかどうかの判別条件が曖昧です。 そこで、この Ajax が動作するときのみ有効とな
CODEX の wp-config.php の編集 にもあるように、WordPress アドレス (URL) とサイトアドレス (URL)を環境変数を用いて、動的に定義すると複数のドメインでアクセスできるようになります。 ただ、この方法は、マルチサイトでは機能しません。 では、どうするかというと、マルチサイト起動時にサイトとブログを判別する部分をカスタマイズします。 サイトとブログの判別は、wp-includes/ms-settings.php にて行われていますが、ここには、 if ( !isset( $current_site ) || !isset( $current_blog ) ) { という分岐があり、$current_site と $current_blog を事前に設定しておけば、WordPress デフォルトの判定ロジックを回避することができます。 この条件分岐の直前に
必要に迫られて、つい。。 注意事項とか利用方法とか wp-load.php へのパスは、環境によって合わせてください。 $update_options の配列に、オプション名をキーに、設定したい内容を値として記述してください。 値をnull で指定すると、設定を削除できます。 元に戻すことはできませんので、実行前にoptionsテーブルのバックアップをとってからにしましょう。 <?php $update_options = array( 'option_name_1' => 'option_value 1', 'option_name_2' => 'option_value 2', 'option_name_3' => 'option_value 3', 'delete_option_name_1' => null, 'delete_option_name_2' => null, ); r
WordPress 3.5 から、メディアアップローダーがガラッと変わって、3.4 までの画像を添付ファイルページにリンクさせない方法が使えなくなってしまっていますが、下記コードで(かなり強引ですが)消すことができます。 function media_script_buffer_start() { ob_start(); } add_action( 'post-upload-ui', 'media_script_buffer_start' ); function media_script_buffer_get() { $scripts = ob_get_clean(); $scripts = preg_replace( '#<option value="post">.*?</option>#s', '', $scripts ); echo $scripts; } add_action( '
WordPress で定期的な処理を行うには、wp_schedule_event という関数を用いることで実現可能です。使い方は、リンク先を見ていただくとして、定期実行させる時間を調整する方法(といっても単なる引数の設定の仕方)を紹介しておきます。 プラグインの有効化した時間に関わらず、午前1時に定期処理させたい場合は、 wp_schedule_event( ceil( time() / 86400 ) * 86400 + ( 1 - get_option( 'gmt_offset' ) ) * 3600, 'daily', 'my_daily_event' ); こんな感じ。午前1時ではなくて、もっと遅い時間などに実行させたい場合は、get_option の前の1を、その時刻で設定すれば大丈夫なはずです。 ceil( time() / 86400 ) * 86400 で、世界標準時での翌
カスタムフィールドを使って、使いやすくはしてみたものの、「プレビューに反映されないんですけど!?」と言われてお嘆きの貴方に。 function get_preview_id( $post_id ) { global $post; $preview_id = 0; if ( $post->ID == $post_id && is_preview() && $preview = wp_get_post_autosave( $post->ID ) ) { $preview_id = $preview->ID; } return $preview_id; } function get_preview_postmeta( $return, $post_id, $meta_key, $single ) { if ( $preview_id = get_preview_id( $post_id ) )
わんばんこ。2012 WordPress アドベントカレンダーの3日目をむゆうさん( @anticyborg )と共に担当させていただきます。本当は、アドベントよりおべんt(以下略 WordPress で実現系のコードを紹介する記事は、よく目にしますし、セキュリティに関する関心も高いようですが、意外に基本的な所が抜け落ちているケースが多いように感じたので、テーマやプラグイン開発時に憶えておいて欲しい WordPress 関数、esc_html、esc_attr、esc_url について、つらつらと書いてみたいと思います。 この esc_ なんちゃらは、WordPress 2.8 から導入された関数で、それ以前のバージョンでは、wp_specialchars、attribute_escape、clean_urlと様々な名称であったものが、(おそらくは憶えやすいように)統一的な関数名に改名され
WordPress で、サイトによっては、自分のアップロードした画像しか利用させたくない場合などもありますよね。 そんなときでも、ちょこっとカスタマイズするだけで、メディアライブラリで表示されるものを制限できることができてしまいます。 CODE 1 /* * メディアの抽出条件にログインユーザーの絞り込み条件を追加する */ function display_only_self_uploaded_medias( $wp_query ) { global $userdata; if ( is_admin() && $wp_query->is_main_query() && $wp_query->get( 'post_type' ) == 'attachment' ) { $wp_query->set( 'author', $userdata->ID ); } } add_action( 'p
「Webサイト上で絞り込み検索ができるようにしたい」というのは比較的よくある要望だと思います。そんな場合どうしてますか?カスタム投稿タイプだったら、アーカイブ表示の際に、少々工夫すれば絞り込みを行うことができてしまうのです。 WordPress では、パーマリンクの設定如何に関わらず、?cat=5 などといったパラメーターを追加すると絞り込みが可能となっています。(なので、カテゴリー内でのテキスト検索といったことも簡単に可能なんですよ?) このため、フォームの method 属性を get にしておけば、比較的簡単に絞り込みができてしまうのですが、この場合、アドレス欄にパラメーターがずらずら並んでしまってクライアント受けが良くないのと、チェックボックスによる複数項目での検索に対応しづらいのが難点です。 これを post で投げて、アドレスはそのままで絞り込み検索、さらにはページ送りにも対応
function add_custom_rewrite_rules() { $rules = array( 'top' => array( '^event/([0-9]{4})/page/([0-9]+)/?' => 'index.php?post_type=event&year=$matches[1]&paged=$matches[2]', '^event/([0-9]{4})/?' => 'index.php?post_type=event&year=$matches[1]', ), 'bottom' => array( ) ); foreach ( $rules as $position => $position_rules ) { foreach ( $position_rules as $rule => $rewrite ) { add_rewrite_rule($rule, $
Copyright (C) 2012 Prime Strategy co.,ltd. Prime Strategy Copyright (C) 2012 Prime Strategy co.,ltd. Prime Strategy 2 Copyright (C) 2012 Prime Strategy co.,ltd. Prime Strategy 3 Copyright (C) 2012 Prime Strategy co.,ltd. Prime Strategy 4 Chapter 0 自己紹介 Copyright (C) 2012 Prime Strategy co.,ltd. Prime Strategy 5 Chapter 0 自己紹介 PS Auto Sitemap PS Disable Auto Formatting PS Taxonomy Expander Prime St
WordPress のパーマリンク構造に %postname% が含まれていて、うっかりパーマリンクの設定をし忘れると、ブラウザのアドレス欄に日本語が表示されたり、 %e3%81%8a%e5%95%8f%e3%81%84%e5%90%88%e3%82%8f%e3%81%9b みたいな感じで、イミフな文字列がならんでしまったりしてあまり気持ちの良いものではありませんよね。 よく分かっているならまだしも、運営を任せていたりすると、そんなURLが大量に発生してげんなり・・・そんな状況もよくあり得ます。 先日フォーラムの 記事のスラッグ名を自動的に記事IDにしたい に回答した内容を一歩進めて、なるべく汎用的に使えるコードを書いてみました。 方針としては、 自分で設定したスラッグの場合は、変更しない 日本語などマルチバイトの場合は、{投稿タイプ}-{記事ID}に強制的に変更 記事IDのみにしていない
WordPressでカスタムフィールドも検索対象に含めてみました。 といっても、全てのカスタムフィールドを検索対象にするといろいろとアレなので、特定の名前を持つもののみに限定しなければなりません。 そこは、 pm.meta_key IN ( 'meta_key1', 'meta_key2', 'meta_key3' ) の meta_keyn の部分を調整してもらえれば、大丈夫だと思います。 function search_custom_field_query( $search, $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) { $q = $wp_query->query_vars; $n = !empty($q['exact']) ? '' : '%';
Custom Post Types Relationships (CPTR) というプラグインをご存じでしょうか。このプラグインは、投稿と投稿や投稿と固定ページ、固定ページとカスタム投稿タイプなど、記事と記事の関連付けが行えるプラグインです。今回は、この Custom Post Types Relationships (CPTR) を使って、手動での関連記事設定と表示する方法をご紹介したいと思います。 関連付けプラグインの比較 この Custom Post Types Relationships (CPTR) 以外にも記事を関連づけ出来るプラグインとしては、Posts 2 Posts もあります。 双方を比較してみると、 Custom Post Types Relationships (CPTR)の優れている点 初期設定など不要なため、有効化のみで簡単に利用できる カスタムフィールドにデー
WordPressで生成される画像サイズを追加する方法については、画像アップロードで作成される画像の種類を追加するにてご紹介しましたが、これだけだと本文に画像を追加する際のサイズの選択肢に表示されません。 今回は、さらに一歩進めてサイズを追加するとともに、挿入するサイズとして選択できるようにしてみました。 と、盛大な前振りの割には大したことをしなくても実現可能で、3.3から追加されている image_size_names_choose というフィルターフックで、サイズを配列のキー、選択肢として表示されるラベル名を配列の値として追加すれば簡単にサイズの選択肢に表示されるようになります。 ただし、add_image_size と image_size_names_choose へのフックを別々に記述していたりすると、修正した際にミスをしたり、選択肢として表示したい/したくないを統一的に管理でき
次のページ
このページを最初にブックマークしてみませんか?
『Simple Colors – WordPressを中心に、F1とか読書とか写真とか』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く