サポート » 使い方全般 » マルチサイトで、カスタムフィールドを使って特定の記事をソートしたい

  • お世話になります。

    以下の条件でネットワーク全体からソートしたいのですが
    カスタムフィールドには、「advanced custom field Pro」を使用しています。
    (デートピッカー及びセレクト型)

    ソートに必要なカスタムフィールド
    //①get_field(‘event-complete’);//状態を表すフィールド(セレクト型)「値が”normal”の記事だけ取得したい」
    //②get_field(‘event-complete-time’);//期限を表すフィールド(日付型)「日時が古い順番で並び替えたい」

    現在、以下のソースを使って絞込みしていますがこれをベースに改編したい感じです。

    
    <?php
     // ネットワークお知らせ情報
    
    /*
    
    ソートに必要なカスタムフィールド
    //①get_field('event-complete');//状態を表すフィールド(セレクト型)「値が"normal"の記事だけ取得したい」
    //②get_field('event-complete-time');//期限を表すフィールド(日付型)「日時が古い順番で並び替えたい」
    
    */
    
    $network_site_not_ids = '';
    $network_site_not_ids = sanitize_text_field(get_field('network-site-not-id','option'));
    $network_site_not_ids = mb_convert_kana($network_site_not_ids, 'a', 'utf-8');
    //$network_site_not_ids = mb_ereg_replace('[^0-9]', '', $network_site_not_ids);//数字とカンマだけにしたいけど、やり方不明
    
    $args = array(
         //「1」が立つと有効、「0」だと無効
         'public' => 1,//属性が「公開」のサイトのみ
         'archived' => 0,//アーカイブサイト
         'mature' => 0,//成人向けサイト
         'spam' => 0,//スパムサイト
         'deleted' => 0, //削除済みサイト
         'site__not_in' => array( /*get_current_blog_id(),$network_site_not_ids*/), //対象除外 一時無効
    );
    $sites = get_sites($args);
     
      if($sites ):
        foreach( $sites as $child_site ):
          $child_site_id = $child_site->blog_id;
          $blog_id_arr[] = $child_site_id;
         endforeach;
      endif;
     
      $sql = '';
      $tmp = $blog_id_arr;
    //$limit_pub = '-1 month';//表示日数の設定(マイナスを付ける事)
    //$limit_mod = '-2 week';//表示日数の設定(マイナスを付ける事)
     
      foreach($blog_id_arr as $b_id){
         next($tmp);
         switch_to_blog($b_id);
         $sql .= <<<HERE
    (SELECT *, $b_id as blog_id
    FROM $wpdb->posts
    WHERE
    (post_type = 'event' )
    AND post_status = 'publish'
    /*AND (post_date > date_add( now(), interval $limit_pub ) OR post_modified > date_add( now(), interval $limit_mod ) )*/
    )
    HERE;
      
        if(current($tmp) !== false){
            $sql .= "UNION\n";
        }
        restore_current_blog();
     
    }//END foreach($blog_id_arr as $b_id)
     
    $sql .= <<<HERE
    ORDER BY RAND()
    LIMIT 5
     
    HERE;
    $posts = $wpdb->get_results($sql);
     
      //記事一覧
      foreach ($posts as $post):
        switch_to_blog($post->blog_id);
        setup_postdata($post);
     
          include('parts_relation_single_post_list_one.php');//投稿の標準コンテンツ読み込み
    
    //$network_post_outを渡す
     
      endforeach;
     
      wp_reset_postdata($post); wp_reset_query();
      restore_current_blog();
     
    //endif;
     
    switch_to_blog( $current_blog_id );//現在のサイトに戻す
     
     //END 関連
     ?>
    

    恐れ入ります、ご教授頂ければ幸いです。
    よろしくお願い致します。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • お世話になります。

    カスタムフィールドの値でソートできるようになったのですが
    カスタムフィールの値(日付)で並び替えが出来なく、困っております。

    現状、以下のソースです。

    
    <?php
     // ネットワークお知らせ情報
    
    /*
    
    ソートに必要なカスタムフィールド
    //②get_field('event-complete-time');//期限を表すフィールド(日付型)「日時が古い順番で並び替えたい」(未解決)
    
    */
    
    $network_site_not_ids = '';
    $network_site_not_ids = sanitize_text_field(get_field('network-site-not-id','option'));
    $network_site_not_ids = mb_convert_kana($network_site_not_ids, 'a', 'utf-8');
    //$network_site_not_ids = mb_ereg_replace('[^0-9]', '', $network_site_not_ids);//数字とカンマだけにしたいけど、やり方不明
    
    $args = array(
         //「1」が立つと有効、「0」だと無効
         'public' => 1,//属性が「公開」のサイトのみ
         'archived' => 0,//アーカイブサイト
         'mature' => 0,//成人向けサイト
         'spam' => 0,//スパムサイト
         'deleted' => 0, //削除済みサイト
         'site__not_in' => array( /*get_current_blog_id(),$network_site_not_ids*/), //対象除外 一時無効
    );
    $sites = get_sites($args);
     
      if($sites ):
        foreach( $sites as $child_site ):
          $child_site_id = $child_site->blog_id;
          $blog_id_arr[] = $child_site_id;
         endforeach;
      endif;
     
      $sql = '';
      $tmp = $blog_id_arr;
    //$limit_pub = '-1 month';//表示日数の設定(マイナスを付ける事)
    //$limit_mod = '-2 week';//表示日数の設定(マイナスを付ける事)
     
      foreach($blog_id_arr as $b_id){
         next($tmp);
         switch_to_blog($b_id);
         $sql .= <<<HERE
    (SELECT *, $b_id as blog_id
    FROM $wpdb->posts
    
    JOIN $wpdb->postmeta AS m1
    ON m1.post_id = $wpdb->posts.ID
    
    WHERE
    post_type = 'event'
    AND post_status = 'publish'
    AND m1.meta_key = 'event-complete'
    AND m1.meta_value = 'normal'
    /*AND (post_date > date_add( now(), interval $limit_pub ) OR post_modified > date_add( now(), interval $limit_mod ) )*/
    
    )
    		 
    HERE;
      
        if(current($tmp) !== false){
            $sql .= "UNION\n";
        }
        restore_current_blog();
     
    }//END foreach($blog_id_arr as $b_id)
     
    //event-complete
    
    $sql .= <<<HERE
    ORDER BY post_date ASC 
    
    LIMIT 5
     
    HERE;
    $posts = $wpdb->get_results($sql);
     
      //記事一覧
      foreach ($posts as $post):
        switch_to_blog($post->blog_id);
        setup_postdata($post);
    
        //サイト名取得(重要)
          $current_sites = get_blog_details($post->blog_id);
          //$site_path = $current_sites -> path;
          $blog_name = sanitize_text_field($current_sites -> blogname);
     
          include('parts_relation_single_post_list_one.php');//投稿の標準コンテンツ読み込み
    
            //$network_post_outで出力
    
      endforeach;
     
      wp_reset_postdata($post); wp_reset_query();
      restore_current_blog();
     
    //endif;
     
    
    switch_to_blog( $current_blog_id );//現在のサイトに戻す
    
     
     //END 関連商品
     ?>
    

    恐れ入ります、ご存知の方いらっしゃいましたら、ご教授頂ければ幸いです。
    よろしくお願い致します。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • このトピックに返信するにはログインが必要です。