フォーラムへの返信

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック投稿者 senkegs

    (@senkegs)

    解決はしていないのですが、urlを変えて対処することにしました。

    blogという名前をarticleにし、

    http://example.com/article
    にwordpressをインストールしてブログの記事を投稿

    http://example.com/article/information/
    にinformation一覧

    にしました。
    シンプルな構造になったので、これで実装できそうです。
    お騒がせしました。

    フォーラム: 使い方全般
    返信が含まれるトピック: 管理画面が更新されません
    トピック投稿者 senkegs

    (@senkegs)

    jim912さん

    ありがとうございます。
    コードは消してしまったので正確にはお答えするのは難しいのですが、remove_capは使っていたので、これのせいですね..。
    データーベースそのものを書き換えるとは思ってもみなかったです。

    一度クリーンな状態にしたかったので、他のデータベースからwp_user_rolesの値をとってきたら無事元通りになりました。

    今後のことを考えると、User Role Editorを使ったほうが他の人が見ても分かりやすいように思うので、こちらを使用したいと思います。ありがとうございました!

    トピック投稿者 senkegs

    (@senkegs)

    そういうことだったのですね…
    原因が分からなかったので、大変助かりました。

    $argを以下に変更したら実装することができました。
    ありがとうございます!

    $arg = array(
        'posts_per_page' => 9,
        'post_type' => array('post','experts','information'),
        'meta_key' => 'number',
        'orderby' => array(
          'meta_value_num'=>'ASC',
          'date'=>'DESC'
        )
        'paged'=>$paged
      );
    トピック投稿者 senkegs

    (@senkegs)

    それぞれのページでの設定になるのですね、勉強になります。

    タイトルと内容が外れてきましたので、get_next_post_sort、get_previous_post_sortを試してみて、また分からなければ改めて質問させて頂きます。

    有難う御座いました!

    トピック投稿者 senkegs

    (@senkegs)

    そうなんですね、ありがとうございます。
    pre_get_postsはメインクエリーを書き換え、個別ページも順応すると思っているのですが、そういうものではないのでしょうか?

    ということを踏まえて色々考えみましたが、
    今回のカスタム投稿タイプにカテゴリーなどが表示されなかったのは、投稿とカテゴリーの記事でページ送りが複雑になるを避けるため、という気がしてきました。

    トピック投稿者 senkegs

    (@senkegs)

    お答えありがとうございます。
    バグなのですか…どうりで出来なかったわけですね。。
    原因が判明して良かったです。

    教えて頂いたコードをfunctions.phpに記載しましたところ、無事実装できました!
    ありがとうございます。

    ただ、phpもといwordpressに詳しくないので、内容がよくわからず..
    不明点もありつつ自分なりに以下のように解釈しましたが、こんな感じでしょうか?

    function custom_pre_get_posts( $wp_query ) {
      //管理画面ではなく、メインクエリーの場合
    	if ( ! is_admin() && $wp_query->is_main_query() ) {
    		if ( $wp_query->is_category() || $wp_query->is_tag() ) {
    
    			$post_types = array();//空の配列
    			$all_post_types = get_post_types( array( 'exclude_from_search' => false ) );//検索対象に含まれる全ての投稿(メディア含む)を取得
    
    			//カテゴリーページの場合
    			if ( $wp_query->is_category() ) {
    
    			  //投稿があるだけ繰り返し
    				foreach ( $all_post_types as $pt ) {
    					$object_taxonomies = $pt === 'attachment' ? get_taxonomies_for_attachments() : get_object_taxonomies( $pt );//attachment(メディアが)が添付されていれば、タクソノミーのメディアを取得、無ければ全てのタクソノミーの値(メディアも?)を取得
    					if ( in_array( 'category', $object_taxonomies ) && ! in_array( $pt, $post_types ) ) {//$object_taxonomiesの中にcategoryがあり、$post_typesに$ptが含まれていれば...(?)
    						$post_types[] = $pt;//空の配列に代入していく
    					}
    				}
    			}
    
    			//タグページの場合
    			if ( $wp_query->is_tag() ) {
    				foreach ( $all_post_types as $pt ) {
    					$object_taxonomies = $pt === 'attachment' ? get_taxonomies_for_attachments() : get_object_taxonomies( $pt );
    					if ( in_array( 'category', $object_taxonomies ) && ! in_array( $pt, $post_types ) ) {//タグページなのにcategoryとは何故でしょうか..?
    						$post_types[] = $pt;
    					}
    				}
    			}
    			if ( $post_types ) {
    				$wp_query->set( 'post_type', $post_types );//$post_typesを投稿順に
    			}
    		}
    	}
    }
    add_action( 'pre_get_posts', 'custom_pre_get_posts' );

    また、別トピを立てた方が良いかもしれませんが、投稿の順番を変えるプラグインもきかず、バグかもということで、同じようにfunctions.phpで設定しようと思いました。
    (一覧ページだけなら実装できたのですが、個別ページが投稿順でページ送りになってしまったので、pre_get_postsを使えばよいのかなと..後出しですみません)

    if ( $post_types ) {
    $wp_query->set( ‘post_type’, $post_types );
    }

    の後に以下のコードを挿入しましたが、上手くいきませんでした。。

    if ( $wp_query->is_post_type_archive('カスタムフィールド名')){
    				$wp_query->set( 'post_type', 'カスタムフィールド名' );
    				$wp_query->set( 'order', 'DESC' );//タクソノミーの値でソート
    				$tax_query[] = array(
    						'taxonomy'=>'タクソノミー名',
    						'field'=>'slug'
    						);
    
    				 $wp_query->set('tax_query', $tax_query);
    			}

    よろしければ、こちらも教えて頂ければ幸いです。
    すみませんがよろしくお願い致します。

    トピック投稿者 senkegs

    (@senkegs)

    なるほど、ありがとうございます。
    複数ソートの場合はこれまでの書き方から変えないといけないのですね。
    とてもよくわかりました!

    お忙しい中教えていただき、大変助かりました。
    どうもありがとうございます。

    トピック投稿者 senkegs

    (@senkegs)

    ありがとうございます。
    ‘relation’ => ‘AND’が肝だったのですね..

    ‘meta_カスタムフィールド名’でも実装できるとは、初めて知りました。
    勉強になります。

    教えていただいたもので十分実装できたのですが、もしよろしければ以下も教えて頂ければ幸いです。
    試しにmeta_queryを以下のようにすると、優先順位のソートはできたものの、開催日でのソートがうまく実装できなかったのですが、

    array(
    ‘key’ => ‘number’,
    ),

    ‘meta_number’ => array(
    ‘key’ => ‘number’,
    ),

    では設定しているものが違うのでしょうか…?

    $args = array(
      'meta_query' => array(
        'relation' => 'AND',
          array(
           'key' => 'number',
           ),
          array(
           'key' => 'day',
           ),
          array(
           'key' => 'endday',
           'compare' => '>=',
           'value' => date("Y-m-d"),
           'type' => 'DATE',
          	)
         ),
       'orderby' => array (
         'number' => 'ASC',
         'day' => 'DESC',
        ),
      );
    トピック投稿者 senkegs

    (@senkegs)

    ありがとうございます。
    日本語のリンク先や色々と見ていたのですが、未だによく分かりません…教えて頂いた英語サイトの方が分かりやすいのは確かですが..

    orderbyが’meta_value”meta_value_num’、orderが’DESC”ASC’であったものが、複数ソートになるとorderbyが’DESC”ASC’になるのが、謎すぎて..

    あれから、これらのリンク先

    WordPressで指定したカスタムフィールドが存在しない場合の投稿一覧を取得する方法
    get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法

    を参考にして、
    ‘meta_value’ => ‘null’,
    ‘meta_compare’ => ‘!=’

    ‘meta_compare’ => ‘NOT EXISTS’
    と試しましたが、そもそもnumberを記入した記事しか表示されていないので、別のところがおかしいのでしょうか。

    $args =array(
      'orderby' => array (
      	'day' => 'DESC',
      	'number' => 'ASC'
      	),
    	'meta_query' => array(
    		array(
    			'key'=>'number',
    			'meta_value' => 'null',
    			'meta_compare' => '!='
    			),
    		array(
    			'key'=>'day',
    			'meta_compare' => 'NOT EXISTS'
    			)
    	)
    );

    イベントの終了日の設定は、別項目として設けたいと思います。
    ありがとうございます。

9件の返信を表示中 - 1 - 9件目 (全9件中)