gqevu6bsiz
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 特定のカスタム投稿の添付画像を、ランダム表示させるカスタム投稿タイプと、カスタムフィールド以外にも何か変えなければいけないのでしょうか?
いえ、基本はこの部分だけです。
【実行結果】
・指定とは関係のない1記事のみが取得される
・「表示させる画像の枚数」を変更するとその数だけ表示されるが、上記記事が複製される
・wp_get_attachment_imageで画像が表示されないこちらに関してですが、おそらく全て「カスタム投稿タイプの全記事」が取得できなかった事が原因だと思われます。
なので、
$CImages[“post_type”] = “books”;
$CImages[“all_posts”] = get_posts( array( “numberposts” => -1 , “post_type” => $CImages[“post_type”] ) );
この部分にて、「投稿タイプ」ではなく「ラベル」を誤って入力していないか等、get_posts()で上手くカスタム投稿タイプの全記事が取得出来るよう試行錯誤してみてください。
※mametasuさんが試しているコードを書いてもらえるとより分かりやすいです。
フォーラム: 使い方全般
返信が含まれるトピック: 特定のカスタム投稿の添付画像を、ランダム表示させるカスタム投稿のIDを複数にするなら、foreach等で全ての画像フィールドIDを一度取得してから、画像IDをシャッフルすればできると思います。
こちらで対応できるのではと思います。
具体的は、- 全カスタム投稿タイプを取得
- カスタム投稿タイプの数がある分だけ、紐づいた画像IDを取得
- 紐づいた画像IDをシャッフル
- シャッフルされた画像IDから、複数毎表示
- 画像IDの親IDを取得し、パーマリンクをつける
このようになるのではないかと思います。
※全カスタム投稿が対処なので処理が重くなりそうな点が心配ですが。コードは、
<?php // カスタム投稿タイプ名 $CImages["post_type"] = "books"; // カスタムフィールドの画像フィールド名 $CImages["meta_name"] = array( 'image_1' , 'image_2' , 'image_3' ); // 全カスタム投稿タイプを取得 $CImages["all_posts"] = get_posts( array( "numberposts" => -1 , "post_type" => $CImages["post_type"] ) ); // 画像IDを全て取得 $CutomImages = array(); foreach( $CImages["all_posts"] as $custom_post ) { foreach( $CImages["meta_name"] as $meta_name ) { $tmp_img = get_post_meta( $custom_post->ID , $meta_name , true ); if( !empty( $tmp_img ) ) { $CImages["all_img_ids"][] = $tmp_img; } } } // 表示させる画像の枚数 $CImages["sheets"] = rand( 1 , count( $CImages["all_img_ids"] ) ); // 取得した画像IDの順番をシャッフル $CImages["randoms"] = $CImages["all_img_ids"]; shuffle( $CImages["randoms"] ); // 表示させる画像IDを決定 for( $i=0; $i<$CImages["sheets"]; $i++ ) { $CImages["get_img_ids"][] = $CImages["randoms"][$i]; } ?> <?php foreach( $CImages["get_img_ids"] as $img_id ) : ?> <?php $attachment_post = get_post($img_id); ?> <a href="<?php echo get_permalink( $attachment_post->post_parent ); ?>"><?php echo wp_get_attachment_image( $img_id ); ?></a> <?php endforeach; ?>
フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のタイトルをプラグインで変更したいrekokerさん
下書きだけの場合は、「○○○の下書き一覧」
ゴミ箱の場合は、「○○○のゴミ箱一覧」についてですが、一覧部分のコードを以下のようにしてみてください。
// 一覧 add_action( 'load-edit.php' , 'admin_title_edit_post_edit' ); function admin_title_edit_post_edit() { global $wp_post_types; // 投稿一覧 $title = '○○○の一覧'; if( !empty( $_REQUEST["post_status"] ) ) { if( $_REQUEST["post_status"] == 'draft' ) { $title = '○○○の下書き一覧'; } elseif( $_REQUEST["post_status"] == 'publish' ) { $title = '○○○の公開済み一覧'; } elseif( $_REQUEST["post_status"] == 'trash' ) { $title = '○○○のゴミ箱一覧'; } } $wp_post_types["post"]->labels->name = $title; // 固定ページ一覧 $title = '■■■の一覧'; if( !empty( $_REQUEST["post_status"] ) ) { if( $_REQUEST["post_status"] == 'draft' ) { $title = '■■■の下書き一覧'; } elseif( $_REQUEST["post_status"] == 'publish' ) { $title = '■■■の公開済み一覧'; } elseif( $_REQUEST["post_status"] == 'trash' ) { $title = '■■■のゴミ箱一覧'; } } $wp_post_types["page"]->labels->name = $title; }
フォーラム: プラグイン
返信が含まれるトピック: 「All-in-One Event Calendar」でカレンダーを読み込むと時間がズレるmaruodesu0413さん
All-in-One Calendar by Then.ly バージョン 1.9.5
すみません、プラグインはこちらになりますか?
http://wordpress.org/extend/plugins/all-in-one-event-calendar/
または、
http://time.ly/上記プラグインと仮定して、wordpress3.5.1でも試してみましたが、私のほうでは設定通りの日時を表示しています。
タイムゾーンについてですが、
「設定」>「一般」
の中にもタイムゾーンの設定できる箇所があるようなので確認してみてください。
※東京 以外になっていれば、日本時間とずれが生じます。フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のデザインを変更するのに良い方法は?urashinさん
IEのブラウザかつ投稿者権限で、投稿一覧画面の左上にある「下書き」という部分をクリックして、
下書きの記事一覧にある記事を編集しようとした時だけ、
投稿画面のデザインがおかしくなります。非常に限定的ですが、上記の例の時だけ、デザインがおかしくなりました。
同じように、wordpress3.5.1にて「Add Admin CSS」をインストールする前、インストールした後かつ、IE7、IE8、IE9(IE Tester)にて同じようにやってみましたが、
urashin さんと似たような現象にはなりませんでした。原因は分かりませんが、おそらく
- 管理画面にcssをどこかで読み込んでいる為おかしくなる
- javascriptファイルのエラーがある為おかしくなる
- 特定のIE・VERの時だけがおかしくなる
- wordpressの指定バージョンの時だけおかしくなる
等が考えられます。
ひとつずつ地道に試していって、原因を特定してから、他のプラグインを探したりしたほうがよいかと思います。
(IE特有の問題であれば、他のプラグインでも解決はしないと思います)お手数ですが、今のwordpressとは別で新たにwordpressをインストールし、プラグインやテーマは一切触らずに、
IEのブラウザかつ投稿者権限で、投稿一覧画面の左上にある「下書き」という部分をクリックして、
下書きの記事一覧にある記事を編集しようとした時と同じように進めてみて、デザインがおかしくなるかどうかを確かめていただくことを私はおすすめします。
フォーラム: 使い方全般
返信が含まれるトピック: 特定のカスタム投稿の添付画像を、ランダム表示させる特定のカスタム投稿の添付画像を複数枚ランダム表示させたい
具体的な部分が分からなかったのですが、以下のようなイメージですか?
index.php に貼り付け、指定の箇所を変更して試してみて下さい。※Advanced Custom Fields で作成した画像フィールドの返り値は「画像ID」とした場合。
<?php // カスタム投稿のID $CImages["post_id"] = 18; // カスタムフィールドの画像フィールド名 $CImages["meta_name"] = array( 'image_1' , 'image_2' , 'image_3' ); // 表示させる画像の枚数 $CImages["sheets"] = rand( 1 , count( $CImages["meta_name"] ) ); // 画像IDを全て取得 $CutomImages = array(); foreach( $CImages["meta_name"] as $meta_name ) { $CutomImages[] = get_post_meta( $CImages["post_id"] , $meta_name , true ); } // 取得した画像IDの順番をシャッフル $CImages["randoms"] = $CutomImages; shuffle( $CImages["randoms"] ); ?> <?php for( $i=0; $i<$CImages["sheets"]; $i++ ) : ?> <?php echo wp_get_attachment_link( $CImages["randoms"][$i] ); ?> <?php endfor; ?>
このコードでは、
- カスタム投稿のIDは指定
- 画像フィールドの順番のランダム
- 画像枚数をランダム
としています。
カスタム投稿のIDを複数にするなら、foreach等で全ての画像フィールドIDを一度取得してから、画像IDをシャッフルすればできると思います。フォーラム: プラグイン
返信が含まれるトピック: 「All-in-One Event Calendar」でカレンダーを読み込むと時間がズレる宜しければ書きをお試しください。
(データベースを触る際は、データベースのバックアップの推奨、テストサーバを用意して試されてください。)管理メニューより、「Events」> 「Settings」を選択
「All-in-One Event Calendar: Settings」
という All-in-One Event Calendarの設定ページ になります。「General Settings」 > 「Viewing Events」> Timezone にて、
タイムゾーンを設定できるようになっているようなのでそこで設定してみてください。※このTimezoneが既に設定済みの場合、このプラグインはTimezoneを再度変更できるようになっていないようです。
その場合の確認・解決方法としては、
ワードプレスインストールURL/wp-admin/options.php にアクセスして、timezone_stringという、タイムゾーンを設定している項目を確認してみてください。Africa/Abidjan 等のような値になっている場合は設定している国/都市が違いますので時間がずれます。
その場合は、Asia/Tokyo と直接記入して変更を保存し(一番下に設定を保存ボタンがあります)、イベントが正常な日時になっているか確認してみてください。フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のタイトルをプラグインで変更したいrekokerさん
プラグインは分かりませんが、コードだと、
// 一覧 add_action( 'load-edit.php' , 'admin_title_edit_post_edit' ); function admin_title_edit_post_edit() { global $wp_post_types; // 投稿一覧 $wp_post_types["post"]->labels->name = '○○○の一覧'; // 固定ページ一覧 $wp_post_types["page"]->labels->name = '■■■の一覧'; } // 投稿 add_action( 'load-post-new.php' , 'admin_title_edit_post_new' ); function admin_title_edit_post_new() { global $wp_post_types; // 新規投稿 $wp_post_types["post"]->labels->add_new_item = '○○○の新規投稿'; // 新規固定ページ $wp_post_types["page"]->labels->add_new_item = '■■■の新規投稿'; } // 編集 add_action( 'load-post.php' , 'admin_title_edit_post' ); function admin_title_edit_post() { global $wp_post_types; // 投稿編集 $wp_post_types["post"]->labels->edit_item = '○○○の編集'; // 投稿編集 $wp_post_types["page"]->labels->edit_item = '■■■の編集'; }
と、functions.php等に記述し、
「○○○の一覧」の部分を変更すると希望通りの表記ができると思います。
(wordpress 3.5.1 にて確認)フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakuseiさん
無事ご希望通りの動作が出来て良かったですね!
もうほぼ全テンプレートにソートの機能をつけた気がしますね(笑それでは、またご機会がありましたらよろしくお願いします。
フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakuseiさん
そうだったんですね。
原因らしきものがはっきりして良かったです!ただ、このコードが使えないとなると、
今回のようなソートのためのコードを用いた時に、
記事が無かった時の場合を表示する方法というものは
あるのでしょうか。あります。
基本的にはこんな感じです。<?php if ( have_posts() ) : ?> ココに書いた内容は、記事が見つかった場合の内容 記事の分だけ while 等 <?php else : ?> ココに書いた内容は、記事が見つからなかった場合の内容 <?php endif; ?>
gakuseiさんご自身のコードをじっくり見て、該当する部分を見つけてください。
記事が無かった時の場合を表示する方法
該当する箇所が分かれば簡単にできます。
じっくり見ても分からないようなら、テンプレートを出来る限り丸々記載したほうが、
回答もいただきやすくなると思います。それと、
<?php query_posts(‘posts_per_page=-1&order=DESC&’ . $query_string); ?>
<?php if(have_posts()): while(have_posts()):
the_post(); ?>
<?php endwhile; else: ?>
<p>一致する記事は見つかりませんでした</p>
<?php endif; ?>もしこのコードのままを記載しているなら、削除したほうがいいと思います。
※query_postsを二重に行っている為と、記事のループ部分に何も処理がない為。フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakuseiさん
お手数お掛けしました。情報ありがとうございます。
$args への値をみる限り、コードは合っているように思えますね。他の原因・解決方法を考えると、あとは
- 使用しているプラグインを全て停止して動作確認
- 使用しているテーマ内テンプレートの問題 (search.php内で二重にquery_postsをしていないか等)
デフォルトのテーマに一度戻して、そこでもういちどsearch.phpの動作確認
が考えられますので、一度試してみてください。
デフォルトのテンプレート(twentytwelve)に戻して、希望通りの動作をするようなら、使用中・カスタマイズ中のテンプレート内の問題、デフォルトのテンプレートでも動かないようならコードの問題、と問題を切り分ける事ができると思います。
→・「Search Results for: 投稿」より下が表示されませんでした
・フッターも表示されませんでした
・記事の一覧が表示されませんでしたこの部分については gakusei さんのテンプレートがどのようなものかが分からないのでなんともいえません。
フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakuseiさん
情報ありがとうございます。
URLは問題なく動作しているようにみえます。なので、$argsに入る値かもしれません。
試しに、
- キーワード検索のみ
- キーワード検索+コメント数の多い順ソート+カテゴリ指定
での、両方の $args に入る値を比較してみて欲しいです。
※ orderby に comment_count、order に DESC が指定されているかどうか等。もし分からないようでしたら、両方の場合での
<?php print_r($args); ?>
で表示されるArray
(
[nopaging] => 1
[orderby] => date
[order] => DESC
[s] => 投稿
)このようなものを記載して欲しいです。
また、上記とは別の問題かもしれないので、これも試しとしてですが、
私の search.php のコード全て記載しますので、
gakusei さんのsearch.phpと変更して、動作確認をしてみてください。※テーマは twentytwelve を想定しています。
<?php /** * The template for displaying Search Results pages. * * @package WordPress * @subpackage Twenty_Twelve * @since Twenty Twelve 1.0 */ get_header(); ?> <?php $uri = home_url( '/' ); ?> <?php if( is_category() or is_tag() ) : ?> <?php $term = get_queried_object(); ?> <?php if ( $term ) : ?> <?php $uri = get_term_link( $term , $term->taxonomy ); ?> <?php endif; ?> <?php endif; ?> <?php echo $uri; ?> <div class="sort"> <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'date' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'date' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>日付の新しい順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'date' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'date' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>日付の古い順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'title' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'title' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>タイトル順(あ~わ・A~Z)</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'title' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'title' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>タイトル順(わ~あ・Z~A)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の高い順(平均)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の低い順(平均)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_score' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_score' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の高い順(総合)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_score' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_score' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の低い順(総合)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価数の多い順</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価数の少ない順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>コメント数の多い順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>コメント数の少ない順</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>閲覧数の多い順</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>閲覧数の少ない順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(A~Z・あ~わ)</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(わ~あ・Z~A)</option> </select> </div> <?php // 何の指定もないときのデフォルトのソート順 $paged = get_query_var( 'paged' ); if( empty( $paged ) ) { $paged = 0; } $args = array( 'posts_per_page' => get_option('posts_per_page') , 'orderby' => 'date' , 'order' => 'DESC' , 'paged' => $paged ); if( is_category() ) { $args["cat"] = get_query_var( "cat" ); } elseif( is_tag() ) { $args["tag"] = get_query_var( "tag" ); } $args["s"] = get_query_var( "s" ); if( !empty( $_GET["meta_key"] ) ) { $args["meta_key"] = strip_tags( $_GET["meta_key"] ); $args["orderby"] = 'meta_value_num'; } elseif( !empty( $_GET["orderby"] ) ) { $args["orderby"] = strip_tags( $_GET["orderby"] ); unset( $args["meta_key"] ); } if( !empty( $_GET["order"] ) ) { $args["order"] = strip_tags( $_GET["order"] ); } ?> <?php query_posts( $args ); ?> <pre><?php print_r($args); ?></pre> <section id="primary" class="site-content"> <div id="content" role="main"> <?php if ( have_posts() ) : ?> <header class="page-header"> <h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentytwelve' ), '<span>' . get_search_query() . '</span>' ); ?></h1> </header> <?php twentytwelve_content_nav( 'nav-above' ); ?> <?php /* Start the Loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', get_post_format() ); ?> <?php endwhile; ?> <?php twentytwelve_content_nav( 'nav-below' ); ?> <?php else : ?> <article id="post-0" class="post no-results not-found"> <header class="entry-header"> <h1 class="entry-title"><?php _e( 'Nothing Found', 'twentytwelve' ); ?></h1> </header> <div class="entry-content"> <p><?php _e( 'Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'twentytwelve' ); ?></p> <?php get_search_form(); ?> </div><!-- .entry-content --> </article><!-- #post-0 --> <?php endif; ?> </div><!-- #content --> </section><!-- #primary --> <?php get_sidebar(); ?> <?php get_footer(); ?>
※nopagingの部分は変更済みです。
少し面倒に感じるかもしれませんが、よろしくお願いします。
フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakuseiさん
なにか他のコードが邪魔をしてしまう、ということがあるのでしょうか。
ソートが出来ない。という事だけでは他のコードの影響なのかどうかは判断しにくいので、
原因を探すために以下の点についてご回答をお願いします。- $uriのデバッグ
- $argsデバッグ
- キーワードを入力して検索した際のURL
- 検索結果ページで、何でもいいのでドロップダウンリストからソート順を選択後のURL
- 現状ではどのような並び準で記事の一覧が表示されていますか?(日付の新しい順ですか?)
デバッグ値についてですが、
$uriは、<div class=”sort”>
の直前に
<?php echo $uri; ?>
等で。$argsは、
<?php query_posts( $args ); ?>
の直後に
<pre><?php print_r($args); ?></pre>
等で。URLについては私の場合だと、
http://localhost/wordpress/?s=キーワード&cat=1
(カテゴリ指定あり)
http://localhost/wordpress/category/未分類/?meta_key=ratings_users&order=ASC&s=キーワード
(カテゴリ指定あり、評価数の少ない順ソート)このようになります。
それでは、ご回答宜しくお願いします。
フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakuseiさん
すみません、文章が結構長いですがご了承ください。。
gakuseiさんの現在使用しているコードを応用する場合、
まず「筆者(投稿者)ごとのソート」ですが、テンプレートタグ/query posts
を見ると、 orderby に ahthor を指定するようです。具体的なドロップダウンのコードは、
<?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'ASC' ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(A~Z・あ~わ)</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'DESC' ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(わ~あ・Z~A)</option>
このようになると思います。
次に検索結果のソートについてですが、
検索結果ページ search.php (カテゴリを指定しても) のテンプレートに同じように
ドロップダウンリスト、query_posts()の記述と、
http://ja.forums.wordpress.org/topic/13822/page/2?replies=37#post-49705
で記載した、検索キーワードの値をURLとquery_postsの両方にセットすれば、できると思います。具体的なコードは、
<?php $uri = home_url( '/' ); ?> <?php if( is_category() or is_tag() ) : ?> <?php $term = get_queried_object(); ?> <?php if ( $term ) : ?> <?php $uri = get_term_link( $term , $term->taxonomy ); ?> <?php endif; ?> <?php endif; ?> <div class="sort"> <select name="original-sort-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'date' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'date' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>日付の新しい順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'date' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'date' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>日付の古い順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'title' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'title' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>タイトル順(あ~わ・A~Z)</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'title' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'title' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>タイトル順(わ~あ・Z~A)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の高い順(平均)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_average' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_average' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の低い順(平均)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_score' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_score' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の高い順(総合)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_score' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_score' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価の低い順(総合)</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価数の多い順</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'ratings_users' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'ratings_users' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>評価数の少ない順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>コメント数の多い順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'comment_count' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'comment_count' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>コメント数の少ない順</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>閲覧数の多い順</option> <?php $Selected = ''; if( !empty( $_GET["meta_key"] ) && !empty( $_GET["order"] ) ) : if( $_GET["meta_key"] == 'views' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'meta_key' => 'views' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>閲覧数の少ない順</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'ASC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'ASC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(A~Z・あ~わ)</option> <?php $Selected = ''; if( !empty( $_GET["orderby"] ) && !empty( $_GET["order"] ) ) : if( $_GET["orderby"] == 'author' && $_GET["order"] == 'DESC' ) : $Selected = 'selected="selected"'; endif; endif; ?> <option value="<?php echo add_query_arg( array( 'orderby' => 'author' , 'order' => 'DESC' , "s" => get_query_var('s') ), $uri ); ?>" <?php echo $Selected ?>>投稿者順(わ~あ・Z~A)</option> </select> </div> <?php // 何の指定もないときのデフォルトのソート順 $args = array( 'nopaging' => 1 , 'orderby' => 'date' , 'order' => 'DESC' ); if( is_category() ) { $args["cat"] = get_query_var( "cat" ); } elseif( is_tag() ) { $args["tag"] = get_query_var( "tag" ); } $args["s"] = get_query_var( "s" ); if( !empty( $_GET["meta_key"] ) ) { $args["meta_key"] = strip_tags( $_GET["meta_key"] ); $args["orderby"] = 'meta_value_num'; } elseif( !empty( $_GET["orderby"] ) ) { $args["orderby"] = strip_tags( $_GET["orderby"] ); unset( $args["meta_key"] ); } if( !empty( $_GET["order"] ) ) { $args["order"] = strip_tags( $_GET["order"] ); } ?> <?php query_posts( $args ); ?>
このようになると思います。
最後に、
どちらのコードを用いても、
「管理画面」の「設定」にある「表示設定」から表示する記事の数を
制限しても機能せず、全ての記事が表示される、という状況になってしまいます。についてですが、このトピックを作成した当初にgakuseiさんが使用していたコード
http://ja.forums.wordpress.org/topic/13822?replies=37#post-48511
にて、posts_per_page の値を -1 としていたので、
gakuseiさんのご希望が、該当する”全ての記事”を対象にしているのかと思ってました。なので、管理画面→表示設定→「1ページに表示する最大投稿数」の値通りの表示をしたい場合は、query_postsへセットしている配列 $args に、この値を挿入します。
※現在使用しているコードでは、デフォルトのソート順のところで指定しています。
↓// 何の指定もないときのデフォルトのソート順
$args = array( ‘nopaging’ => 1 , ‘orderby’ => ‘date’ , ‘order’ => ‘DESC’ );詳しい説明は、ページ送り引数を参照してください。
値を挿入する方法としては、
// 何の指定もないときのデフォルトのソート順 $paged = get_query_var( 'paged' ); if( empty( $paged ) ) { $paged = 0; } $args = array( 'posts_per_page' => get_option( 'posts_per_page' ) , 'orderby' => 'date' , 'order' => 'DESC' , 'paged' => $paged );
このようになると思います。
(category.phpや等にも適用する場合は、同じようにデフォルトの設定部分を変更してください。)あと別件ですが、ページ送り「←過去の投稿」や「新しい投稿→」が表示されない場合は、
twentytwelveテーマなら、記事ループ終了直後あたりendwhileに、<?php twentytwelve_content_nav( 'nav-below' ); ?>
を入れてみてください。
以上になります。
フォーラム: 使い方全般
返信が含まれるトピック: 記事一覧の時のソートができませんgakusei さん
いえ、むしろそんなに謝らなくても大丈夫ですよ!
検索フォームにカテゴリーを絞る際のソートについてですが、
検索フォームがカテゴリを指定してちゃんと動作している時を前提として書きます。解決方法としては、
検索結果のテンプレート search.php 内の以前のコード部分、
ドロップダウンリストのURLが挿入される部分の値に、
検索されたキーワード(search_query)を挿入します。カテゴリ指定なし
<?php $DropSortList[] = array( “sort” => array( “orderby” => “date” , “order” => “DESC” ) , “label” => “日付の新しい順” ); ?>
カテゴリ指定あり
<?php $DropSortList[] = array( "sort" => array( "orderby" => "date" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "日付の新しい順" ); ?>
※s => get_query_var(s) で検索キーワードを挿入しています。
以前のドロップダウンリスト全てに適用する場合は、
<?php $DropSortList[] = array( "sort" => array( "orderby" => "date" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "日付の新しい順" ); ?> <?php $DropSortList[] = array( "sort" => array( "orderby" => "date" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "日付の古い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "orderby" => "title" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "タイトル順(わ~あ・Z~A)" ); ?> <?php $DropSortList[] = array( "sort" => array( "orderby" => "title" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "タイトル順(A~Z・あ~わ)" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_average" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "評価平均の高い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_average" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "評価平均の低い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_score" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "評価総合の多い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_score" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "評価総合の少ない順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_users" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "評価をつけた人数の多い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "ratings_users" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "評価をつけた人数の少ない順" ); ?> <?php $DropSortList[] = array( "sort" => array( "orderby" => "comment_count" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "コメントの多い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "orderby" => "comment_count" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "コメントの少ない順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "views" , "order" => "DESC" , "s" => get_query_var('s') ) , "label" => "アクセス数の多い順" ); ?> <?php $DropSortList[] = array( "sort" => array( "meta_key" => "views" , "order" => "ASC" , "s" => get_query_var('s') ) , "label" => "アクセス数の少ない順" ); ?>
このようになると思います。
今回のように上手くソートが出来なかった原因としては、
カテゴリを指定すると、$uriに入れているURLの部分が変わってしまう為、
ご希望通りのソートが出来なかったと思います。
(検索結果ページのURLから、カテゴリページのURLへ)もし上記のコードで上手く動かないようなら、
お手数ですがまずはフォームが希望通りの動作をしているか、ご確認ください。※カテゴリ指定+検索キーワード の場合の検索結果のURLの形式に、s と cat の2つが含まれているかどうか。ですね。