2017-12-11 22 views
0

WooCommerceでは、関連する製品のリストを個々の製品ページに出力しようとしています。私は次のように、関連する製品の配列を取得することができる午前:配列を数値で並べ替え

<? 
// Current product ID 
$currentProductId = $product->get_id(); 
// Related products 
$relatedProducts = wc_get_related_products($currentProductId); 

print_r($relatedIssues); 
?> 

次のようにしかし、これはランダムな順序であるように思われ、配列を出力します。

Array ([0] => 28 [1] => 27 [2] => 30 [3] => 26) 

私は、可能な場合は、ハイからローに、数値で、この配列を整理したいと思いますか?

ありがとうございました。

答えて

3

を:

オプション1:古き良きrsort()

rsort($relatedProducts, SORT_NUMERIC);

注:この機能は、新しいを割り当て配列内の要素へのキー。キーを並べ替えるのではなく、割り当てられている既存のキーが削除されます。この場合、これは無関係ですが、後で処理するために配列キーが重要な場合には大混乱になります。

オプション2:usort()

usort($relatedProducts, sort_desc); 

function sort_desc($a, $b) { 
    if ($a === $b) { 
    return 0; 
    } 
    return ($a > $b) ? -1 : 1; 
} 

オプション3:wc_products_array_orderby()

wc_products_array_orderby($relatedProducts, $orderby = 'id', $order = 'desc')

することはできませんだけでソートプロダクトIDによってもtitle, date, modified (date), menu_order, priceによります。

これは、最終的にはIDに基づいてソートするための次の関数を呼び出しますが、最終的な出力に「DESC」注文のarray_reverse()を行います。

/** 
* Sort by id. 
* @since 3.0.0 
* @param WC_Product object $a 
* @param WC_Product object $b 
* @return int 
*/ 
function wc_products_array_orderby_id($a, $b) { 
    if ($a->get_id() === $b->get_id()) { 
     return 0; 
    } 
    return ($a->get_id() < $b->get_id()) ? -1 : 1; 
} 

なぜあなたは独身で直接カスタム関連製品のレイアウトをコーディングすることは避けてください商品ページのテンプレート?

関連製品がすでに woocommerce_output_related_products機能を content-single-product.phpテンプレートで woocommerce_after_single_product_summaryアクションに夢中にされています。

単一商品ページの関連商品の注文を変更する場合は、 をwoocommerce_output_related_products_argsで簡単にフィルタできます。または サイドバーなどのテンプレートの外側に必要なときは、[related_products orderby="ID"]ショートコードを使用できます。

私は強くフォルダ template\single-productからではなくcontent-single-product.phpに追加のコードを追加し WooCommerceテンプレートrelated.phpを使用してカスタマイズすることをお勧めレイア​​ウトを変更します。

標準のWooCommerce/WordPressの規則を逸脱すると、将来的に保守、デバッグまたはアップグレードするのが難しいコードクラフトが作成される可能性があります。さらに、他のプラグイン、テーマ、またはあなた自身のカスタムコードが上記の関数に「フック」したい場合や、HTML出力の場合はそうすることができません。

2

ちょうどこの試してみてください。これを達成するための多くの方法があります

usort($relatedIssues, function($a, $b) { return ($a > $b) ? -1 : 1; });