🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

解決済

2回答

1416閲覧

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

signon

総合スコア12

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2020/01/01 15:26

編集2020/01/03 09:08

前提・実現したいこと

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

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

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

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

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

Categoryぺージの記述

PHP

1 <!-- 並替え用テキストボタン --> 2 <ul> 3 <li> 4 <a href="<?php echo add_query_arg( array('sort' => 'date','order' => 'ASC'), get_pagenum_link(1) ); ?>">新着順</a> 5 </li> 6 <li> 7 <a href="<?php echo add_query_arg( array('meta_key' => 'item_price','orderby' => 'meta_value_num','order' => 'DESC'), get_pagenum_link(1) ); ?>">価格順: 大</a> 8 </li> 9 <li> 10 <a href="<?php echo add_query_arg( array('meta_key' => 'item_price','orderby' => 'meta_value_num','order' => 'ASC'), get_pagenum_link(1) ); ?>">価格順: 小</a> 11 </li> 12 </ul> 13 </section> 14 15 <!-- 以下 商品一覧表示BOX --> 16 <article id="centerBox"> 17 <?php 18 $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; //ページの判定 19 $category = get_the_category();//カテゴリ情報取得 定型文 20 $cat = $category[0]; //カテゴリ情報取得 定型文 21 $cat_slug = $cat -> slug;//カテゴリスラッグ取得(カテゴリ名だと日本語の場合があるからスラッグ) 22 23 $wp_query = new wp_query(array( 24 'category_name' => $cat_slug, 25 'posts_per_page' => 30, 26 'post_status' => 'publish', 27 'paged' => $paged 28 )); 29 ?> 30 <?php if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); usces_the_item(); ?> 31 32  <!-- 一覧用カラム --> 33 <table class="itemList"> 34 <tbody> 35 <tr> 36 <th> 37  <a href="<?php the_permalink() ?>"> 38 <?php usces_the_itemImage(0, 800, 800, $number = 0); ?> 39  </a> 40 </th> 41 </tr> 42 <tr> 43 <td> 44  <p class="item_name"> 45 <?php usces_the_itemName(); ?><b><?php if (usces_is_skus()) : ?></b></p> 46   <p class="price">¥ <?php usces_the_firstPrice(); ?> <b><?php usces_guid_tax(); ?></b> 47 </p> 48 <?php endif; ?> 49 <?php echo $post->the_excerpt; ?> 50 <!--カスタムフィールド値 取得テスト表示--> 51 <span><?php echo get_post_meta($post->ID, 'item_price', true); ?></span> 52 <!--カスタムフィールド値 取得テスト表示 end--> 53 </td> 54 </tr> 55 </tbody> 56 </table> 57 <?php endwhile; else: ?> 58 <?php endif; ?> 59 <!-- 一覧用カラム end --> 60 </article> 61 62<!-- 以下 ページャー用記述省略 -->

function.phpの記述

PHP

1/* ----- カスタムフィールドボックスを投稿管理画面で有効化 ----- */ 2//参考:https://fit-jp.com/customfield/ 3// 固定カスタムフィールドボックス 4function add_item_fields() { 5 add_meta_box( 'item_setting', '商品価格(並び替え用)', 'insert_item_fields', 'post', 'normal'); 6} 7add_action('admin_menu', 'add_item_fields'); 8 9function insert_item_fields() { 10 global $post; 11 echo '価格: <input type="text" name="item_price" value="'.get_post_meta($post->ID, 'item_price', true).'" size="50" /> <br>'; 12} 13 14function save_item_fields( $post_id ) { 15 if(!empty($_POST['item_price'])){ 16 update_post_meta($post_id, 'item_price', $_POST['item_price'] ); 17 }else{ 18 delete_post_meta($post_id, 'item_price'); 19 } 20} 21add_action('save_post', 'save_item_fields'); 22/* ----- カスタムフィールドボックスを投稿管理画面で有効化 end ----- */ 23 24/* ----- カスタムフィールド パラメーター有効化 ----- */ 25function add_meta_query_vars( $public_query_vars ) { 26 $public_query_vars[] = 'meta_key'; 27 $public_query_vars[] = 'meta_value_num'; 28 return $public_query_vars; 29} 30add_filter( 'query_vars', 'add_meta_query_vars' ); 31/* ----- カスタムフィールド パラメーター有効化 end ----- */

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

バージョン

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

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

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

PHP

1<?php 2 $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; //ページの判定 3 $category = get_the_category();//カテゴリ情報取得 定型文 4 $cat = $category[0]; //カテゴリ情報取得 定型文 5 $cat_slug = $cat -> slug;//カテゴリスラッグ取得(カテゴリ名だと日本語の場合があるからスラッグ) 6 7 $wp_query = new wp_query(array( 8 'category_name' => $cat_slug, 9 'posts_per_page' => 30, 10 'post_status' => 'publish', 11 'paged' => $paged 12 )); 13 ?>

投稿2020/01/03 16:20

編集2020/01/03 16:22
signon

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

PHP

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

投稿2020/01/03 02:49

編集2020/01/03 02:51
madone99

総合スコア1857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

signon

2020/01/03 10:28

madone99さん、ご回答をありがとうございます。 カスタムフィールドのパラメーターは有効にしております。 通常の記事一覧は可能なのですが、ボタンでの表示切替えができない状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問