この時期は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をかける必要がある。
「役に立ったよ!」という方は、ぜひTwitter・gitのフォローを!
それでは、よいWPライフを!