タグ

ブックマーク / www.warna.info (29)

  • WordPress使うなら、PHPのエラーメッセージと仲良くなっておこう – Simple Colors

    WordpPress Advent Calendar 2015 6日目の記事になります。 何を書こうか色々と迷ったのですが、フォーラムの質問やSNSなどを見ていると、まだまだPHPのエラーメッセージが何を伝えているかを見ていない人が多いと感じたので、啓発の意味も込めてエラーメッセージについて書いてみることにしました。(WordPressというより単なるPHPの話になっている気がしますが、デザイナーさんとかブロガーさんとか、必要だと思われる人が多い気がするのでよしとしてください。 WordPressは、至極当たり前ながらPHPで動作していますね。テンプレートだけだと、HTMLも混ざっているので、あまり感じられないかもしれませんが、index.phpから始まって、処理が全て完了するまで、全てPHP上で動作しています。そして、PHPのお作法上間違っていたりすると、その間違っている箇所で処理が止ま

  • WordPress 3.7以上で簡単にメディア表示をアップロードしたユーザーのみに限定する – Simple Colors

    なんとも時が経つのは早いもので、ちょっとほっておいたら、ほぼ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

  • WordPressのbody_classに固定ページのルートのスラッグを追加する – Simple Colors

    body_classで出力されるclassに最上位のルートのページのスラッグを含むclass名が追加されるようになります。子ページ全部で同じcssを利用できるので、特定のツリーだけ配色を変更したいときなど便利にですよね。さらに、汎用化しているので固定ページだけじゃなくて、階層サポートしたのカスタム投稿タイプでも利用できます。 class名は、{投稿タイプスラッグ}-category-{ページのスラッグ}という命名規則にしてますが、このあたりはお好みで。 $post_type . '-category-' . $post->post_name の部分を変えてくださいな。 function add_page_root_body_class( $classes ) { if ( is_singular() ) { $post_type = get_query_var( 'post_type' )

  • WordPressの設定画面への項目追加方法まとめ – Simple Colors

    WordPressの設定メニュー内の「一般」「投稿設定」「表示設定」「ディスカッション」「メディア」「プライバシー」「パーマリンク設定」の7ページでは、ほぼ同一の手法で独自の項目を追加することができます。この追加方法と各設定画面における追加可能な場所をまとめてみました。 ※ 「パーマリンク設定」ページでは、項目の表示追加方法は同じですが、データの保存方法が異なります。 設定画面の構成 設定ページでは、同一機能に関する項目をまとめたものをセクション、セクションが集まって1つの設定画面を構成し、これをページと捉えます。 設定画面では、ページに対してセクションを追加したり、セクションに対して項目が追加できるようになっています。 項目の表示追加 項目の表示追加は、add_settings_field関数を用いて行います。追加する項目が複数ある場合の表示順は、add_settings_field関数

  • WordPressの表示をログインユーザーに限定する – Simple Colors

    WordPressで制作したサイトを限定されたメンバーにだけ公開したい。 そんなケースも多々あるかと思います。 とにかく、全ての表示を会員限定にしたいのであれば、functions.phpに数行書き加えるだけでも、簡単な会員限定サイトを実現することが可能です。 下記のコードをテーマのfunctions.phpに追加すれば、ログインしておらず、なおかつログインページでない場合に、ログインページへのリダイレクトを行うようになります。 function require_login() { if ( ! is_user_logged_in() && strpos( basename( $_SERVER['REQUEST_URI'] ), 'wp-login.php' ) !== 0 ) { auth_redirect(); } } add_action( 'init', 'require_logi

  • 投稿の個別ページのみパーマリンクを変更する方法 – Simple Colors

    WordPress で投稿のURLは、 /article/%postname%/ とか /blog/%post_id%/ にしたいけど、パーマリンク設定で article や blog といったディレクトリを入れてしまうと、カテゴリーやアーカイブの表示でも、このディレクトリが付いてしまってかっこ悪いですよね。 今回は、このちょっとしたモヤモヤを解消するべく、投稿の詳細表示の時のみ特定のディレクトリを追加する方法を紹介します。 投稿詳細ページのパーマリンクを変えるには、リンクを出力する時と、アクセスされた際に条件を判定するリライトルールの作成時の二箇所にフックをする必要があります。 前者は、pre_post_link と言うフィルターフックを利用します。このフィルターフックは、get_permalink 関数内に存在し、パーマリンク設定の内容をフィルタリングすることができます。ここで、ディレ

  • Debug BarとDebug-Bar-ExtenderでWordPressのパフォーマンスチェック – Simple Colors

    WordPressの Debug-Bar-Extender が、なかなかに便利だったので紹介してみようと思います。 表示のパフォーマンスというものは、画面上では明確になりにくいため、あれこれとプラグインを入れたりしているうちに、遅くなっているなんてこともありがちですが、Debug BarとDebug-Bar-Extenderは、これを数字として分かりやすく見せてくれるプラグインです。 Debug-Bar-Extenderは、automattic のThorsten tott 氏が開発したプラグインで、名前の通り Debug Bar を拡張するものとなっています。 Debug Bar 単体の機能については、 @wokamoto さんの書かれた WordPress 開発に便利なプラグイン Debug Bar が詳しいので、そちらをご一読ください。 Debug-Bar-Extenderでできるこ

  • WordPressで翻訳ファイルを修正せずにテキストを変更する方法 – Simple Colors

    WordPressの翻訳を変更する場合、その多くがpoファイルを変更する方法を紹介されています。 でも、これってコアファイルの改変に近いし、アップデートするたびに同じ内容の修正を行わなければならないのも大変ですよね。 で、今回はpoファイルを修正しなくても、翻訳を独自のテキストに変更する方法を試してみます。 WordPressには、1500以上のフックが存在していますが、その中には翻訳されたテキストに対するフックも存在しています。このフックを用いて翻訳されたテキストを差し替える処理を行えば、poファイルの編集を行わずに表示される日語訳を修正することが可能になるというわけです。 サンプルとして、管理画面の「投稿」を「最新情報」として表示させるようにしてみます。 CODE 1 function custom_gettext( $translated, $text, $domain ) { $

  • WordPress の管理画面にユーザー権限グループに応じた class を出力する – Simple Colors

    管理画面の body_class に相当する admin_body_class にフィルターフックをかけて、ユーザーの権限グループを含める方法 出力されるソースの修正ができない場合、これを使ってCSSで非表示にすることができますね。 CSSの読み込みは、admin_initなどで、wp_enqueue_style すればオッケー。 admin_body_class で渡されてくるものは文字列形式なので、扱いがちょっとめんどくさいのだけど。 function add_user_role_class( $admin_body_class ) { global $current_user; if ( ! $admin_body_class ) { $admin_body_class .= ' '; } $admin_body_class .= 'role-' . urlencode( $curr

  • WordPress の記事一覧で他ユーザーの投稿を非表示にする – Simple Colors

    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() &&

    mimosafa
    mimosafa 2013/03/21
  • WordPressの新着情報表示にカスタム投稿タイプを含める方法 – Simple Colors

    @junirock78 さんが、ツイッターでカスタム投稿タイプも含めた新着情報を表示する方法を質問されていたので、おせっかいかとは思いつつ話の輪に加わってみました。 方法としては、テンプレートで query_posts または get_posts などを使って取得する方法が一般的だとは思いますが、これだとデータベースへの問い合わせが新たに発生してしまいます。 トップページでの表示であれば、もともと最新の投稿を取得してきていますから、これにカスタム投稿タイプを含めるようにしてしまえば、新たなデータベースへの問い合わせもなく、パフォーマンス的にも良くなりますね。 では、どうすれば良いかというと、データベースへの問い合わせが発生する直前に、トップページだったら(最新の投稿を表示している = is_home() がtrue)、リクエストの条件にカスタム投稿タイプの指定を追加してあげれば、あとは W

  • WordPressの新機能 複数タクソノミークエリーまとめ – Simple Colors

    先日、「WordPress 3.1 RC3 をみんなでテスト! 」に参加し、その際、複数カスタムタクソノミークエリー(en. Multiple Taxonomy Handling)のテストを担当させてもらいました。 ついでに、仕様などについても探ってましたので、まとめてみることにします。 複数タクソノミークエリーとは なるべく正確に言うと、query_posts または get_posts の引数に新たに設けられた tax_query により、カテゴリー、タグ、カスタムタクソノミー等による記事抽出条件を、複数かつ様々なパラメータで細かく設定できる機能。 tax_query の値は、抽出条件毎の配列と各条件の結合方法(パラメータ名:relation)で構成される。 こう書いても、分かりにくいと思いますので、もっとかみ砕いて、粉状にして言うと「これさえ憶えておけば、WordPressでの絞り込

  • WordPress のマルチサイトを複数のドメインで動かす – Simple Colors

    CODEX の wp-config.php の編集 にもあるように、WordPress アドレス (URL) とサイトアドレス (URL)を環境変数を用いて、動的に定義すると複数のドメインでアクセスできるようになります。 ただ、この方法は、マルチサイトでは機能しません。 では、どうするかというと、マルチサイト起動時にサイトとブログを判別する部分をカスタマイズします。 サイトとブログの判別は、wp-includes/ms-settings.php にて行われていますが、ここには、 if ( !isset( $current_site ) || !isset( $current_blog ) ) { という分岐があり、$current_site と $current_blog を事前に設定しておけば、WordPress デフォルトの判定ロジックを回避することができます。 この条件分岐の直前に

  • WordPress のカスタムフィールドをプレビュー対象にする – Simple Colors

    カスタムフィールドを使って、使いやすくはしてみたものの、「プレビューに反映されないんですけど!?」と言われてお嘆きの貴方に。 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 ) )

    mimosafa
    mimosafa 2012/12/27
    ][WordPress]
  • PowerPoint プレゼンテーション

    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 を扱う上で憶えておいて欲しい3つのesc #wacja2012 – Simple Colors

    わんばんこ。2012 WordPress アドベントカレンダーの3日目をむゆうさん( @anticyborg )と共に担当させていただきます。当は、アドベントよりおべんt(以下略 WordPress で実現系のコードを紹介する記事は、よく目にしますし、セキュリティに関する関心も高いようですが、意外に基的な所が抜け落ちているケースが多いように感じたので、テーマやプラグイン開発時に憶えておいて欲しい WordPress 関数、esc_html、esc_attr、esc_url について、つらつらと書いてみたいと思います。 この esc_ なんちゃらは、WordPress 2.8 から導入された関数で、それ以前のバージョンでは、wp_specialchars、attribute_escape、clean_urlと様々な名称であったものが、(おそらくは憶えやすいように)統一的な関数名に改名され

    mimosafa
    mimosafa 2012/12/04
  • WordPress のメディア表示をアップロードしたユーザーのみに限定する – Simple Colors

    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

  • カスタム投稿タイプのアーカイブ表示で、カスタム分類での絞り込み検索を行う – Simple Colors

    「Webサイト上で絞り込み検索ができるようにしたい」というのは比較的よくある要望だと思います。そんな場合どうしてますか?カスタム投稿タイプだったら、アーカイブ表示の際に、少々工夫すれば絞り込みを行うことができてしまうのです。 WordPress では、パーマリンクの設定如何に関わらず、?cat=5 などといったパラメーターを追加すると絞り込みが可能となっています。(なので、カテゴリー内でのテキスト検索といったことも簡単に可能なんですよ?) このため、フォームの method 属性を get にしておけば、比較的簡単に絞り込みができてしまうのですが、この場合、アドレス欄にパラメーターがずらずら並んでしまってクライアント受けが良くないのと、チェックボックスによる複数項目での検索に対応しづらいのが難点です。 これを post で投げて、アドレスはそのままで絞り込み検索、さらにはページ送りにも対応

    mimosafa
    mimosafa 2012/10/26
  • WordPress の投稿スラッグを自動的に生成する – Simple Colors

    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でカスタムフィールドも検索対象にする – Simple Colors

    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']) ? '' : '%';

    mimosafa
    mimosafa 2012/08/15