この時期はIT補助金の関係でWoocommerceを使ったサイトのコーディング依頼がよく来ます。

先日そういった案件でWoocommerceの商品詳細ページが表示されなくなりかなり困りました。

商品詳細ページのURLがデフォルトの/product/sample-product/であれば問題ないのですが、
productの箇所を別のものに変えようとすると表示されなくなります。

結果としてはCustom Post Type Permalinksとの相性だったのですが、
解決しようにもどちらかを停止するわけにもいきません。

そこで、Custom Post Type Permalinksのhookを使用して、
特定のカスタム投稿タイプのみスルーする関数を書きました。

今回はその時に書いた関数の紹介となります。

# この記事で解決すること

Woocommerce と Custom Post Type Permalinks を併用時に
商品詳細ページが表示されなくなる状況を解決できます。

前提

各種バージョン

  • WordPress 6.2.2
  • Woocommerce 8.0.2
  • Custom Post Type Permalinks 3.5.2

編集ファイル

  • theme_name
    • custom_functions.php
    • functions.php

custom_functions.phpを優先に、どちらか一方のファイルでOK

原因

冒頭でもお伝えした通り、商品詳細ページのURLが
デフォルトの/product/sample-product/であれば問題ありません。

上記の内容から、Woocommerceにデフォルト備わっているパーマリンクのリライト機能と、
Custom Post Type Permalinksのりライト機能が競合したことによるもの
と考えられます。

ちなみに、Woocommerceにデフォルト備わっているパーマリンクのリライト機能は
設定->パーマリンクにあります。

解決方法

上記の原因から、解決方法として最も考えやすいものは、
Woocommerceのカスタム投稿product
Custom Post Type Permalinksにスルーさせるというものです。

custom_functions.php

add_filter( 'cptp_is_rewrite_supported', 'custom_cptp_is_rewrite_supported', 10, 2);
function custom_cptp_is_rewrite_supported ( $support , $post_type )
{
  if ( $post_type === 'product' ) return false;
  return $support;
}

functions.phpでもOKです

至ってシンプルな関数ですね。。。

投稿タイプがproductの場合はリライトのサポートをスルーするという内容になります。

ちなみに、WoocommerceのベースURLをhogeにしても、
投稿タイプの名前productは変わりません。

最後に

問題は解決しましたでしょうか?

それでは、今回のポイントをおさらいします。

# point

WoocommerceとCustom Post Type Permalinksを併用し、
かつWoocommerceのベースURLをproductから別のものに変更する場合は、
cptp_is_rewrite_supportedに対してhookをかける必要がある。

「役に立ったよ!」という方は、ぜひTwittergitのフォローを!

それでは、よいWPライフを!