メニュー

【WordPress】Welcartでカート画面の商品名をカスタマイズする

フック「usces_filter_cart_item_name」を使ってカスタマイズする。

そのままだと記事タイトルとSKUコードと……みたいに入ってしまうので、商品名の出力か、もしSKU表示名が設定されている場合は商品名+SKU表示名の出力に変更する。
SKU表示名の方の対応を忘れると、例えば青・赤・黒みたいな色別での設定があるとき、商品名だけの処理だと「何色の商品を選んだっけ?」みたいなことになってしまう。

上手くいくまでの経緯

調べると、Welcartで登録された商品は、標準の投稿機能として分類されているみたい。
Rest APIを叩いて確認してみると、確かに標準の投稿機能側に商品がズラリと入ってた。

さてここからメタキーで商品名なるものを取得しようと思うけど、どうやら公開される範囲で登録されていない模様。

さて困ったと調べていたところ「usces_the_itemName」という関数が見つかり、これはループ外でも使用できるとのこと。

$cart_item_name = get_post_meta( $args['post_id'], '_itemName', true );

ヤッター!!!🙌
……と思うものの束の間、どうやらこれでは取得できなかった。

もしかするとこの指定はなくなっているのかもしれない。今回自分は野良プラグインを作成し、外部テーマをできる限り子テーマ化しないよう構築しているから、野良プラグイン側からこにょこにょしているというのも原因かもしれないけれど。。

ループ内で使用できるusces_the_itemNameという関数が如何なるものかを調べるため「usc-e-shop/functions/template_func.php」の中身を確認。

function usces_the_itemName( $out = '', $post = null ) {
	if ( null === $post ) {
		global $post;
	}

	$product = wel_get_product( $post );
	$str     = $product['itemName'];

	if ( 'return' === $out ) {
		return $str;
	} else {
		echo esc_html( $str );
	}
}

ふむふむ。だ、大丈夫、こう見えて案外コード見てますわかってますダイジョウブ()

wel_get_productという関数を使って、記事IDから登録した商品の情報を取得し、その中から商品名を抽出している。
フック「usces_filter_cart_item_name」ではパラメーターからカートに追加した商品の記事IDを取得できるので、今回の実装に使ってみることに。

実際のコード

function custom_cart_item_name( $cart_item_name, $args ) {
  $product = wel_get_product($args["post_id"]);
  $codeName = "";
  for ($i = 0; $i <= count($product["_sku"]); $i++) {
    if( $product["_sku"][$i]["code"] === $args["sku"] && !empty($product["_sku"][$i]["name"]) ) {
      $codeName = $product["_sku"][$i]["name"];
    }
  }
  $cart_item_name = !empty($codeName) ? esc_html($product["itemName"]) . '<br>' . esc_html($codeName) : esc_html( $product["itemName"] );
  return $cart_item_name ;
}
add_filter( 'usces_filter_cart_item_name', 'custom_cart_item_name', 10, 2 );

ヤッター!!!🙌

商品の種類を複数登録している場合もあるからループ文を使用する。
判定は、SKUコードがカートに入れた商品と一致し、且つSKU表示名が登録されている場合……という感じ。