質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

自作テーマWordpress ( Welcart )で カスタムフィールド数値 で並び順を変更

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,289

score 12

前提・実現したいこと

Wordpressの商品販売プラグイン Welcart で自作テーマを制作中です。
商品一覧ページ(categoryページ)で、カスタムフィールド数値を使い、ボタンクリックで、投稿(商品)の並べ替えが動作しません。
「新着・価格順(大)・価格順(小)」での並べ替えが希望です。

□ カスタムフィールドの数値は、抽出できています。
(カスタムフィールド数値で、通常の記事一覧ソートもできます。)

□ add_query_arg()でURLが変更される事も確認済みです。

□ Welcartではない通常のWordpressでも並び替え動作しません。

何が原因わからず、ほとほと困っております。どうかご教授を宜しくお願いします。

Categoryぺージの記述

 <!-- 並替え用テキストボタン -->
  <ul>
   <li>
    <a href="<?php echo add_query_arg( array('sort' => 'date','order' => 'ASC'), get_pagenum_link(1) ); ?>">新着順</a>
  </li>
   <li>
    <a href="<?php echo add_query_arg( array('meta_key' => 'item_price','orderby' => 'meta_value_num','order' => 'DESC'), get_pagenum_link(1) ); ?>">価格順: 大</a>
  </li>
   <li>
    <a href="<?php echo add_query_arg( array('meta_key' => 'item_price','orderby' => 'meta_value_num','order' => 'ASC'), get_pagenum_link(1) ); ?>">価格順: 小</a>
   </li>
  </ul>
 </section>

 <!-- 以下 商品一覧表示BOX -->
  <article id="centerBox">
    <?php 
      $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; //ページの判定
      $category = get_the_category();//カテゴリ情報取得 定型文
      $cat = $category[0];           //カテゴリ情報取得 定型文
      $cat_slug = $cat -> slug;//カテゴリスラッグ取得(カテゴリ名だと日本語の場合があるからスラッグ)

      $wp_query = new wp_query(array(
        'category_name' => $cat_slug,
        'posts_per_page' => 30,
        'post_status' => 'publish', 
        'paged' => $paged
      ));
      ?>
      <?php if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); usces_the_item(); ?>

  <!-- 一覧用カラム -->
      <table class="itemList">
        <tbody>
          <tr>
            <th>
             <a href="<?php the_permalink() ?>">
        <?php usces_the_itemImage(0, 800, 800, $number = 0); ?>
             </a>
            </th>
          </tr>
          <tr>
            <td>
             <p class="item_name">
             <?php usces_the_itemName(); ?><b><?php if (usces_is_skus()) : ?></b></p>
            <p class="price">¥ <?php usces_the_firstPrice(); ?> <b><?php usces_guid_tax(); ?></b>
            </p>
            <?php endif; ?>
            <?php echo $post->the_excerpt; ?>
            <!--カスタムフィールド値 取得テスト表示-->
            <span><?php echo get_post_meta($post->ID, 'item_price', true); ?></span>
            <!--カスタムフィールド値 取得テスト表示 end-->
            </td>
          </tr>
        </tbody>
      </table> 
      <?php endwhile; else: ?>
      <?php endif; ?>
     <!-- 一覧用カラム end -->
  </article>

<!-- 以下 ページャー用記述省略 -->

function.phpの記述

/* ----- カスタムフィールドボックスを投稿管理画面で有効化 ----- */
//参考:https://fit-jp.com/customfield/
// 固定カスタムフィールドボックス
function add_item_fields() {
     add_meta_box( 'item_setting', '商品価格(並び替え用)', 'insert_item_fields', 'post', 'normal');
}
add_action('admin_menu', 'add_item_fields');

function insert_item_fields() {
    global $post;
    echo '価格: <input type="text" name="item_price" value="'.get_post_meta($post->ID, 'item_price', true).'" size="50" /> <br>';
}

function save_item_fields( $post_id ) {
    if(!empty($_POST['item_price'])){
        update_post_meta($post_id, 'item_price', $_POST['item_price'] );
    }else{
        delete_post_meta($post_id, 'item_price');
    }
}
add_action('save_post', 'save_item_fields');
/* ----- カスタムフィールドボックスを投稿管理画面で有効化 end ----- */

/* ----- カスタムフィールド パラメーター有効化 ----- */
function add_meta_query_vars( $public_query_vars ) {
    $public_query_vars[] = 'meta_key';
    $public_query_vars[] = 'meta_value_num';
    return $public_query_vars;
}
add_filter( 'query_vars', 'add_meta_query_vars' );
/* ----- カスタムフィールド パラメーター有効化 end ----- */


function補足:実際のfunction記述に改行余白は入れておりません。

バージョン

Wordpressバージョン 5.1.4
Welcartバージョン 1.9.25

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

自己解決いたしましたので記載します。
下記のページ判定とpost_per_pageなどの配列を削除する事で、ソート用のadd_query_argが機能しました。
ページ判定は、管理画面サイドの投稿数の設定で、何故か付与されている状態です。
ページャーも問題なく機能しております。
尚、searchページ、categoryページ、frontページでの動作も良好です。

考えすぎだったのでしょうか...少し腑に落ちません。精進します。

<?php 
      $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; //ページの判定
      $category = get_the_category();//カテゴリ情報取得 定型文
      $cat = $category[0];           //カテゴリ情報取得 定型文
      $cat_slug = $cat -> slug;//カテゴリスラッグ取得(カテゴリ名だと日本語の場合があるからスラッグ)

      $wp_query = new wp_query(array(
        'category_name' => $cat_slug,
        'posts_per_page' => 30,
        'post_status' => 'publish', 
        'paged' => $paged
      ));
      ?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

$public_query_varsにクエリ変数の追加はされていますか?
以下のようにしてmeta_keyなどを追加してからではどうでしょう。

add_filter( 'query_vars', 'my_query_vars' );
function my_query_vars( $public_query_vars ) {
    return array_merge( $public_query_vars, ['meta_key', 'order', 'orderby'] );
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/03 19:28

    madone99さん、ご回答をありがとうございます。
    カスタムフィールドのパラメーターは有効にしております。

    通常の記事一覧は可能なのですが、ボタンでの表示切替えができない状態です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る