Toro_Unit (Hiroshi Urabe)
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 2つのカスタムフィールドの値を計算してソートしたいパラメーターでは解決出来ないので、フィルターフックを使ってSQLを改変する必要があります。
meta_queryを使ってキーを指定すると、2つ目のカスタムフィールドを抽出したモノにmt1というエイリアスがつけられるのでそれを使ってSQLを書き換えます。function my_posts_orderby( $orderby ){ global $wpdb; return str_replace( $wpdb->prefix.'postmeta.meta_value', $wpdb->prefix.'postmeta.meta_value, mt1.meta_value', $orderby ); } add_filter( 'posts_orderby', 'my_posts_orderby' , 10 ); $array = array( 'post_type' => 'projects', 'posts_per_page' => '10', 'orderby' => 'meta_value_num', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'meta_key_01', 'compare' => 'EXISTS' ), array( 'key' => 'meta_key_02', 'compare' => 'EXISTS' ) ), 'paged' => get_query_var( 'paged' ) ); query_posts( $array ); remove_filter( 'posts_orderby', 'my_posts_orderby' , 10 );
また、query_postsを使って変更すると、記事が読み込まれた後にテンプレート上でもう一度記事を読み込むことになるので、コストがかかりますし、いろんな不具合の温床となりますので、
pre_get_postsを使って以下のようにした方が良いかと思います。<?php add_action( 'pre_get_posts', 'my_pre_get_posts' ); function my_pre_get_posts( $query ) { //管理画面の時や、メインのループで無いときは無視。 if ( !$query->is_main_query() or is_admin() ) { return; } //projectのアーカイブの時のみ。 if( $query->is_post_type_archive( 'projects' ) ) { $query->set('orderby', 'meta_value_num'); $meta_query = array( 'relation' => 'AND', array( 'key' => 'meta_key_01', 'compare' => 'EXISTS' ), array( 'key' => 'meta_key_02', 'compare' => 'EXISTS' ) ); $query->set('meta_query', $meta_query); add_filter( 'posts_orderby', 'my_posts_orderby' , 10 ); } } function my_posts_orderby( $orderby ){ global $wpdb; return str_replace( $wpdb->prefix.'postmeta.meta_value', $wpdb->prefix.'postmeta.meta_value, mt1.meta_value', $orderby ); }
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿のページ送りで2ページ目以降が表示されないhttp://example.com/page/page/2/
というURLは内部的には、
http://example.com/page/?paged=2
というURLとして解釈されると言うことです。
なので、http://example.com/page/?page=2
としてアクセスしても2ページ目にはたどり着けないということです。
フォーラム: 使い方全般
返信が含まれるトピック: カテゴリページでの記事のソートURLの後ろに、
http://example.com/category/hoge/?order=DESC&orderby=post_title
みたいな形でパラメーターを渡すと並べ替えが出来ます。
渡せるパラメーターは、関数リファレンス/WP Query – WordPress Codex 日本語版 の順序&順序ベースパラメータの項目を参考にしてみて下さい。
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿のページ送りで2ページ目以降が表示されないこの記述を行っているテンプレートは、何でしょうか?
WordPressの読み込まれるテンプレートは、- URLのパース
- データベースから投稿の読み出し
- それら結果に応じてテンプレートを読み込み
という流れになっています。
archive.phpや、index.php等で読み込むモノを変更している場合は、WP_Query等で記事読み込む前にテンプレートの決定が行われるので、たとえば、というページでこれを処理しているとき、カスタム投稿タイプoneの記事数が3件だとすると、
ページに表示する最大投稿数を1にしても4ページ以降は存在しないので、先に404.phpが読み込まれてしまうという寸法です。これを避けるためには、固定ページで実装するのが良いかと思います。
また、
http://example.com/page/page/2/
のパラメーターは、
http://example.com/page/?paged=2
となります。
フォーラム: 使い方全般
返信が含まれるトピック: indexで宣言した変数・配列はfooter.phpで使えない?header.php や footer.phpはそれぞれ、get_header()、get_footer()等の関数の内部でincludeされます。
なので、footer.phpで定義した変数は、footer.phpでのみ使用可能なローカル変数となります。index.php等のパーツではないテンプレートやfunctions.phpでの変数はグローバル変数となります。
index.phpで$hoge = 'hoge';
という変数を定義した場合は、footer.phpでは
global $hoge; echo $hoge // hogeが表示
のように変数をグローバル宣言するとアクセスできます。
PHP: 変数のスコープ – Manual
等も参考にしてみて下さい。フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿URLにて/%postname%をうってみたものの・・・ゴミ箱などに同名の投稿があったり、別の投稿タイプでcontactという名前のスラッグのページが存在すると、名前が変更されてしまいます。
全部の投稿に対してユニークな値になりますので、他の投稿タイプのデータも確認した方が良いかと思います。
フォーラム: テーマ
返信が含まれるトピック: 複数のカスタム投稿タイプで1つのカスタム分類を用いた際のテンプレートプラグイン作者です。
今更ですが、この問題についてですが、タクソノミーのリンク周りはあんまり複雑なコトが出来ません。get_term_link等で、- リンクを生成する場合、複数のpost_typeに紐付いている場合に、どちらのモノか特定が出来ない
- post_typeパラメーターを追加すると、タクソノミーテンプレートより、カスタム投稿タイプのテンプレートが先に読まれる
等の問題が発生するので、URLの見た目だけ変更するという実装になっています。
一応、1.0.0で、post_typeパラメーターを追加するかどうかの設定を足しました。こちらで対処することが出来るかと思いますが、テンプレートの読み込みなど、かなり挙動が変更されてしまう部分がありますので、ご注意下さい。
フォーラム: 使い方全般
返信が含まれるトピック: get_postsで0件の時 「Undefined offset: 0 」 が出るpostを表示する処理というのは、どのようになっているのでしょうか?
おそらく、不正なrewind_postsや、have_posts(内部的にrewind_postsを呼んでいる)の呼び出しがあったものと思われます。フォーラム: 使い方全般
返信が含まれるトピック: sqlで欲しい情報だけを取り出したいWP_User_Queryを使ってみてはどうでしょう?
http://codex.wordpress.org/Class_Reference/WP_User_Query#Custom_Field_Parameters
フォーラム: 使い方全般
返信が含まれるトピック: author.phpでカスタム投稿の記事一覧をページングしたい著者アーカイブにて、表示される投稿をカスタマイズするには、pre_get_postsを使います。
add_action("pre_get_posts","author_pre_get_posts"); function author_pre_get_posts($query){ if( $query->is_main_query() && !is_admin() && $query->is_author() ) { $query->set ("post_type", array( 'posttype1','posttype2','posttype3' ) ); $query->set( "posts_per_page", 3); } }
ページがそもそも存在するかどうかの判定は、テンプレートが読み込まれる前に行われるので、テンプレート上でページ送りを実装すると、次のページは存在するはずなのに、404が表示されるなどの問題が発生してしまいます。
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿タイプのリライトルールについてregister_taxonomyの引数の
‘rewrite’ => array(‘slug’ => ‘event/cat’)
を、
‘rewrite’ => array(‘slug’ => ‘event’)
とすれば、一応表示は可能です。
ただし、
という設定そのものが、既存の、
の設定と競合を起こし、404になったり、「投稿が見つかりません」と表示される事があります。
ですので、URLを、「http://www.example.com/event/cat/カスタム分類のターム名」として設定するか、カスタム投稿側のパーマリンク設定を、post_idを使うようにして、
add_rewrite_rule(‘event/cat/([^/]+)/?$’, ‘index.php?events_cat=$matches[1]’, ‘top’);
の設定を、数字のみのものにはマッチしないように変える必要があります。
フォーラム: プラグイン
返信が含まれるトピック: CKEditorについてTinyMCEで良ければ、
http://firegoby.jp/wp/tinymce_templatesこんなプラグインがあります。
フォーラム: プラグイン
返信が含まれるトピック: 【Contact Form 7】thanksページでIE11のみ落ちます。IE11だと未検証なのですが、IE10以下で、cssに Helvetica , Helvetica None 等が、設定されていると、JSを動作させたタイミングで、ブラウザが落ちる不具合があります。
contact form 7にその手のCSSが存在していないので、テーマのCSS等を確認してみて下さい。
フォーラム: プラグイン
返信が含まれるトピック: カスタム投稿タイプの月別アーカイブとパンくずリストの関係Custom Post Type Permalinksの開発者です。
カスタム投稿タイプの日付アーカイブなどは、そもそもWordPressに標準装備されていない機能です。(一応パラメーターを投げてやれば投稿の取得は可能です)
ですので、パンくずを自分で実装する必要があるかと思います。
もしくは、
bread_crumb(“echo=false”);
等として出力させず、preg_match等で書き換える等でしょうか。。。
フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてカスタムフィールドの全文検索は相当時間がかかるので、
カスタムタクソノミー(カスタム分類)を使用すると、データベースにインデックスが設定されているため、そこそこ高速に動作するようになると思います。エリアやジャンルなどは、タクソノミーにしやすいものだと思います。