サポート » 使い方全般 » TOPページに投稿記事に入るカスタムフィールドの値を計算してTOP10を表示

  • 解決済 manami

    (@manami)


    現在、コスメの口コミサイトを制作しているのですが
    TOPページに投稿記事のカスタムフィールドで入力されている
    項目[ 効果、すっきり感、落ちやすさ]の平均の高いTOP10を
    TOPページに表示したいのですが上手くできません・・・

    ここ一週間色々調べてみてチャレンジしているのですが
    私の知識では解決出来そうにないのでご教授頂けませんでしょうか?

    お忙しいところ大変恐縮ですが宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • おそらくSQLでつなげてつなげてavgで並び替えて取得という形になるかと思いますが
    そういう部分は他の方に任せて…

    私でしたら項目が3つ程度でしたら平均点のカスタムフィールドを作ってやって
    直接入力してもらうか、こういうのが簡単にできるのがコンピューターじゃないのか!
    と言われる場合にはjavascriptやアクションフックで自動で入るようにします

    トピック投稿者 manami

    (@manami)

    早速ご返答有難うございます☆
    まだ初心者なので勉強も兼ねてやりたいと
    思っております。

     javascriptやアクションフックで自動で入る
    どの様な事をおっしゃっているのかさっぱりです・・・

    ご教授頂けたら幸いです。

    functions.php に以下のコードを追加します。

    add_filter( 'posts_fields', 'my_posts_fields', 10, 2 );
    function my_posts_fields( $fields, $query ) {
      if ( ! empty( $query->query_vars['ave'] ) ) {
        global $wpdb;
    
        $fields .= ",( {$wpdb->postmeta}.meta_value + mt1.meta_value + mt2.meta_value ) AS point";
      }
    
      return $fields;
    }
    
    add_filter( 'posts_orderby', 'my_posts_orderby', 10, 2 );
    function my_posts_orderby( $orderby, $query ) {
      if ( ! empty( $query->query_vars['ave'] ) ) {
        global $wpdb;
    
        $orderby = 'point DESC';
      }
    
      return $orderby;
    }

    TOP10を出力するところで以下のように書きます。

    $top10 = get_posts( array(
      'ave'               => true,
      'suppress_filters'  => false,
      'posts_per_page'    => 10,
      'meta_query'        => array(
        array(
          'key'       => 'aaa', // 効果のメタキー
          'value'     => 0,
          'type'      => 'NUMERIC',
          'compare'   => '>'
        ),
        array(
          'key'       => 'bbb', // すっきり感のメタキー
          'value'     => 0,
          'type'      => 'NUMERIC',
          'compare'   => '>='
        ),
        array(
          'key'       => 'ccc', // 落ちやすさのメタキー
          'value'     => 0,
          'type'      => 'NUMERIC',
          'compare'   => '>='
        ),
      ),
    ) );
    
    foreach( $top10 as $post ) :
      setup_postdata( $post );
      echo '<p>' . get_the_title() . ' (' . sprintf( '%.1f', $post->point / 3 ) . ')</p>';
    endforeach;
    wp_reset_postdata();

    トピック投稿者 manami

    (@manami)

    ご回答いただき誠に有難うございます。
    思っている形に出力する事が出来ました。
    本当に有難う御座いました。

    1点上手くいかないところがあるのですが

    echo ‘<p>’ . get_the_title() . ‘ (‘ . sprintf( ‘%.1f’, $post->point / 3 ) . ‘)</p>’;
    endforeach;

    の部分にカスタムフィールドに入っている画像(写真)を一緒に出したいのですが
    色々調べて試したのですが上手くいかないので大変恐縮ですが教えて頂けませんか?

    カスタムフィールドに画像のURLが入っているなら

    post_custom( 'カスタムフィールド名' )
    get_post_meta( get_the_ID(), 'カスタムフィールド名', true )
    $post->カスタムフィールド名

    などを echo esc_url() します。

    カスタムフィールドに画像のIDが入っているなら
    上記の値を echo wp_get_attachment_image() します。

    カスタムフィールドに入っている画像(写真)を一緒に出したい

    このトピックとは別の話題になるので、わからない場合はトピックを新しく追加すると良いです。

    トピック投稿者 manami

    (@manami)

    早速アドバイス頂き誠に有難う御座いました。
    無事完成する事ができました。

    私ももっと勉強と経験を積んでアドバイスできる人を
    目指して頑張っていきます。

    本当に有難うございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「TOPページに投稿記事に入るカスタムフィールドの値を計算してTOP10を表示」には新たに返信することはできません。