WooCommerceのパーマリンク設定を取得する

諸事情でWooCommerceから設定できるパーマリンクをとりたかったので覚書。

DBを見る

データそのものはwp_optionsに入っている。
パーマリンクの更新を行っていない場合は存在しないかもしれない。

mysql> SELECT option_name,option_value FROM wp_options WHERE option_name = "woocommerce_permalinks" ;
+------------------------+--------------------------------------------------------------------------------------------------------------------------+
| option_name            | option_value                                                                                                             |
+------------------------+--------------------------------------------------------------------------------------------------------------------------+
| woocommerce_permalinks | a:4:{s:13:"category_base";s:0:"";s:8:"tag_base";s:0:"";s:14:"attribute_base";s:0:"";s:12:"product_base";s:8:"/product";} |
+------------------------+--------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

WP-CLIで見る

WP-CLIだとフォーマット指定で見れる

$ wp option get woocommerce_permalinks --format=json
{
  "category_base": "",
  "tag_base": "",
  "attribute_base": "",
  "product_base": "/product"
}

$ wp option get woocommerce_permalinks --format=yaml
---
category_base:
tag_base:
attribute_base:
product_base: /product

変更を見てみる


管理画面からわかりやすい形でそれぞれカスタマイズしてみる。

WP-CLIでみる

$ wp option get woocommerce_permalinks
array (
  'category_base' => 'p-cat',
  'tag_base' => 'p-tag',
  'attribute_base' => 'p-atts',
  'product_base' => '/shop/%product_cat%',
  'use_verbose_page_rules' => true,
)

わかりやすい。

初期設定値について

パーマリンク設定を全く触っていない状態だと、woocommerce_permalinksという項目がwp_optionsに存在しない。
では初期設定値はどこにあるのかというと、思いっきりベタ打ちしてある。

例:https://github.com/woocommerce/woocommerce/includes/class-wc-post-types.php#L105

		register_taxonomy( 'product_cat',
			apply_filters( 'woocommerce_taxonomy_objects_product_cat', array( 'product' ) ),
			apply_filters( 'woocommerce_taxonomy_args_product_cat', array(
				'hierarchical'          => true,
				'update_count_callback' => '_wc_term_recount',
				'label'                 => __( 'Categories', 'woocommerce' ),
				'labels' => array(
						'name'              => __( 'Product categories', 'woocommerce' ),
						'singular_name'     => __( 'Category', 'woocommerce' ),
						'menu_name'         => _x( 'Categories', 'Admin menu name', 'woocommerce' ),
						'search_items'      => __( 'Search categories', 'woocommerce' ),
						'all_items'         => __( 'All categories', 'woocommerce' ),
						'parent_item'       => __( 'Parent category', 'woocommerce' ),
						'parent_item_colon' => __( 'Parent category:', 'woocommerce' ),
						'edit_item'         => __( 'Edit category', 'woocommerce' ),
						'update_item'       => __( 'Update category', 'woocommerce' ),
						'add_new_item'      => __( 'Add new category', 'woocommerce' ),
						'new_item_name'     => __( 'New category name', 'woocommerce' ),
						'not_found'         => __( 'No categories found', 'woocommerce' ),
					),
				'show_ui'               => true,
				'query_var'             => true,
				'capabilities'          => array(
					'manage_terms' => 'manage_product_terms',
					'edit_terms'   => 'edit_product_terms',
					'delete_terms' => 'delete_product_terms',
					'assign_terms' => 'assign_product_terms',
				),
				'rewrite'               => array(
					'slug'         => empty( $permalinks['category_base'] ) ? _x( 'product-category', 'slug', 'woocommerce' ) : $permalinks['category_base'],
					'with_front'   => false,
					'hierarchical' => true,
				),
			) )
		);

初期パーマリンクまとめ

Name Default slug Source
Category product-category https://github.com/woocommerce/woocommerce/includes/class-wc-post-types.php#L105
Tags product-tag https://github.com/woocommerce/woocommerce/includes/class-wc-post-types.php#L143
商品ページ product https://github.com/woocommerce/woocommerce/includes/class-wc-post-types.php#L234

※attribute_baseはproductのslug決定処理内にありました。

まとめ

WooCommerceで追加される投稿タイプのパーマリンクを取得する場合は、以下の通り。

WordPress get_option('woocommerce_permalinks');
WP-CLI $ wp option get woocommerce_permalinks
MySQL mysql> SELECT option_name,option_value FROM wp_options WHERE option_name = "woocommerce_permalinks";

もしこれで値が取れない場合は、以下の初期値が適用されている。

Name Default slug
Category product-category
Tags product-tag
商品ページ product

Follow me!