welcartの商品をおすすめ順に並べる。(管理画面も)

これは、標準機能に追加してほしい機能ですが、

1.商品一覧ページで【おすすめ順 / 新着順 / 古い順 / 価格が高い順 / 価格が低い順】などにソート機能をつける。

2.管理画面の商品マスターページで、おすすめ順でソートできるようする。

この2つを実現するために、まずは下準備


下準備

まずは、商品ページにカスタムフィールドの追加。ACFを使う場合は、別途プラグインが必要。通常では表示されない。

WCEX Patch for AFC

カスタムフィールドは、

基準価格 / wio_price おすすめ順 / wio_default 

と作成。インジェクション処理も出てくるので、数字限定が無難かと。

WCEX Item List Layout(現在は公開されていない)を使うと強制的なフィルターがかかるようで、面倒なので使わない。


商品一覧でおすすめ順の表示

カテゴリーテンプレートに追加する事項

<a href=”‘.add_query_arg( array(‘order_type’=> 0 ) ).'”><i class=”fas fa-sort fa-fw_”></i>おすすめ順</a>
//URLにクエリを追加
同様にほかのクエリも設定
 
$order_type = isset($_GET[‘order_type’]) ? (int)$_GET[‘order_type’]: 0;

//$order_typeに格納

$args = array();
switch ($order_type) {
case0:
//おすすめ
$args = array(‘meta_key’=>’wio_default’,’orderby’ => ‘meta_value’,’order’=>’ASC’);

}

//defaultも記載しておくとよい

‘orderby’ => ‘meta_value’,の場合は文字列扱いなので、数字扱いにしたければ
‘orderby’ => ‘meta_value_num’,

 

$args = array_merge( $wp_query->query, $args );
query_posts($args);
//既存のクエリにマージする
 
ここから標準ループ
 
ここまでテンプレート処理
 
 
 

管理画面の処理

プラグイン直接変更になります。

include/usces_item_master_list.php

<table id=”mainDataTable”を探して

thに追加

<th scope=”col”>
<ahref=”<?php echo site_url();?>/wp-admin/admin.php?page=usces_itemedit&changeSort=wio_default&switch=ASC”>▼</a>
&nbsp;/&nbsp;
<ahref=”<?php echo site_url();?>/wp-admin/admin.php?page=usces_itemedit&changeSort=wio_default&switch=DESC”>▲</a>
</th>
 
tdに追加
<?php echo get_field(‘wio_default’,$post_id);?>
 
 
classes/itemList.class.php
function GetRows()を探してきて赤色な感じに追加(MySQLのve5以上の方だけでよいかと)
 
$query = $wpdb->prepare(“SELECT post.ID, mc.meta_value AS `item_code`, mn.meta_value AS `item_name`, md.meta_value AS `wio_default`
FROM {$this->table} AS `post`
LEFT JOIN $wpdb->postmeta AS `mc` ON post.ID = mc.post_id AND %s = mc.meta_key
LEFT JOIN $wpdb->postmeta AS `mn` ON post.ID = mn.post_id AND %s = mn.meta_key
LEFT JOIN $wpdb->postmeta AS `md` ON post.ID = md.post_id AND %s = md.meta_key
LEFT JOIN $wpdb->postmeta AS `meta` ON post.ID = meta.post_id AND %s = meta.meta_key
LEFT JOIN $wpdb->term_relationships AS `tr` ON post.ID = tr.object_id
LEFT JOIN $wpdb->term_taxonomy AS `tt` ON tt.term_taxonomy_id = tr.term_taxonomy_id “
, ‘_itemCode’, ‘_itemName’, ‘wio_default’,‘_isku_’);
 
 
function setSearchSql() を探してきて case ‘wio_default’:をついか
 
case ‘wio_default’:
$column = ‘md.meta_value’;
$this->searchSql = $column .’ LIKE ‘.”‘%”. esc_sql($this->arr_search[‘word’][‘wio_default’]) .”%'”;
break;
 
 
 
 
 
多分こんな感じ
適当に書いていますので、できなかったらごめんなさい。
有料でカスタマイズのご依頼は受け付けております。
 

Custom Field Suiteの「ループ(複製フィールド) 」を CFS()->getを使わずに出力

Custom Field Suiteのプラグインを停止しても既存のカスタムフィールドにすでに入力しているデータを出力したい場合、get_post_meta()をつかってどうやって処理すればよいのか。

Custom Field Suiteの繰り返しフィールドは、
通常
CFS()->get(‘繰り返しフィールド名’,ポストID);
で出力されますが、
get_post_meta(ポストID,’繰り返しフィールド名’,false);
では出力できません。

例えば、
繰り返しフィールド名 ‘photos’;
 その中に、’photo_url’と’photo_text’の2つのフィールドを設定した場合。

Custom Field Suiteを使っている場合は、
$photos = CFS()->(‘photos’,$post->ID);

foreach($photos as $photo){
echo $photo[‘photo_url’];
}

としていると思いますが、

$photo_url = get_post_meta($post->ID, ‘photo_url’, false);
$photo_text = get_post_meta($post->ID, ‘photo_text’, false);
$count_total = count($photo_url);
$photos = array();
for($i = 0; $i < $count_total; $i++){ $photos[$i][‘photo_url’]=$photo_url[$i]; $photos[$i][‘photo_text’]=$photo_text[$i]; } とすることで、 CFS()->getを使わずに
同じ$photosを得ることができます。

ちょっと面倒ですが、
Custom Field Suite
から
Advanced Custom Fields PRO
に乗り換えるときなど、過去のデータを表示するにはこの処理が必要になるでしょう。

リダイレクトが繰り返し行われました

さくらインターネットを利用中のサイトで、昨日(2020/5/29)から

このページは動作していません
www.example.comでリダイレクトが繰り返し行われました。
Cookie を消去してみてください.
ERR_TOO_MANY_REDIRECTS

と出る場合との報告が上がっています。

Really Simple SSLを使用してSSLをリダイレクトされている場合は、
サイトルートの .htaccessが以下のようになっていたら、

# BEGIN rlrssslReallySimpleSSL rsssl_version[3.2.X]

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# END rlrssslReallySimpleSSL

下記ように書き換えるとなおります。

# BEGIN rlrssslReallySimpleSSL rsssl_version[3.3.3]

RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# END rlrssslReallySimpleSSL

サーバーの設定が変わったのではないでしょうか。
さくら側からの事前報告があったかどうかは不明です。

googlemapの埋め込み方(覚書)

パターン1|非公式:embedで出力 q= 検索できたキーワードを+でつなげて引数に使用 サイトの言語設定が反映できる

パターン2|非公式:embedで出力 q= 経度と緯度とキーワードを引数に使用 サイトの言語設定が反映できる

パターン3|公式:embedで出力する公式な方法はAPI_KEYが必要  サイトの言語設定が反映できる
https://developers.google.com/maps/documentation/embed/get-api-key

採用!パターン4|公式:通常の出力 サイトの言語設定が反映できない。OSの言語が反映?