2013-07-24 16:01:36 +00:00
< ? php
/**
2015-11-03 13:53:50 +00:00
* Adds settings to the permalinks admin settings page
2013-07-24 16:01:36 +00:00
*
2015-02-04 16:27:06 +00:00
* @ class WC_Admin_Permalink_Settings
2014-11-30 06:52:32 +00:00
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin
2015-02-04 16:27:06 +00:00
* @ version 2.3 . 0
2013-07-24 16:01:36 +00:00
*/
2014-09-20 19:52:30 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
2015-02-04 16:27:06 +00:00
exit ;
2014-09-20 19:52:30 +00:00
}
2013-07-24 16:01:36 +00:00
if ( ! class_exists ( 'WC_Admin_Permalink_Settings' ) ) :
/**
2015-11-03 12:28:01 +00:00
* WC_Admin_Permalink_Settings Class .
2013-07-24 16:01:36 +00:00
*/
class WC_Admin_Permalink_Settings {
/**
* Hook in tabs .
*/
public function __construct () {
2014-06-04 10:16:19 +00:00
$this -> settings_init ();
$this -> settings_save ();
2013-07-24 16:01:36 +00:00
}
/**
2015-02-04 16:27:06 +00:00
* Init our settings .
2013-07-24 16:01:36 +00:00
*/
public function settings_init () {
// Add a section to the permalinks page
2015-10-05 11:15:35 +00:00
add_settings_section ( 'woocommerce-permalink' , __ ( 'Product Permalinks' , 'woocommerce' ), array ( $this , 'settings' ), 'permalink' );
2013-07-24 16:01:36 +00:00
// Add our settings
add_settings_field (
2014-11-30 06:52:32 +00:00
'woocommerce_product_category_slug' , // id
__ ( 'Product category base' , 'woocommerce' ), // setting title
2013-07-24 16:01:36 +00:00
array ( $this , 'product_category_slug_input' ), // display callback
2014-11-30 06:52:32 +00:00
'permalink' , // settings page
'optional' // settings section
2013-07-24 16:01:36 +00:00
);
add_settings_field (
2014-11-30 06:52:32 +00:00
'woocommerce_product_tag_slug' , // id
__ ( 'Product tag base' , 'woocommerce' ), // setting title
array ( $this , 'product_tag_slug_input' ), // display callback
'permalink' , // settings page
'optional' // settings section
2013-07-24 16:01:36 +00:00
);
add_settings_field (
2014-11-30 06:52:32 +00:00
'woocommerce_product_attribute_slug' , // id
__ ( 'Product attribute base' , 'woocommerce' ), // setting title
array ( $this , 'product_attribute_slug_input' ), // display callback
'permalink' , // settings page
'optional' // settings section
2013-07-24 16:01:36 +00:00
);
}
/**
* Show a slug input box .
*/
public function product_category_slug_input () {
$permalinks = get_option ( 'woocommerce_permalinks' );
?>
2015-08-05 18:08:15 +00:00
< input name = " woocommerce_product_category_slug " type = " text " class = " regular-text code " value = " <?php if ( isset( $permalinks['category_base'] ) ) echo esc_attr( $permalinks['category_base'] ); ?> " placeholder = " <?php echo esc_attr_x('product-category', 'slug', 'woocommerce') ?> " />
2013-07-24 16:01:36 +00:00
< ? php
}
/**
* Show a slug input box .
*/
public function product_tag_slug_input () {
$permalinks = get_option ( 'woocommerce_permalinks' );
?>
2015-08-05 18:08:15 +00:00
< input name = " woocommerce_product_tag_slug " type = " text " class = " regular-text code " value = " <?php if ( isset( $permalinks['tag_base'] ) ) echo esc_attr( $permalinks['tag_base'] ); ?> " placeholder = " <?php echo esc_attr_x('product-tag', 'slug', 'woocommerce') ?> " />
2013-07-24 16:01:36 +00:00
< ? php
}
/**
* Show a slug input box .
*/
public function product_attribute_slug_input () {
$permalinks = get_option ( 'woocommerce_permalinks' );
?>
< input name = " woocommerce_product_attribute_slug " type = " text " class = " regular-text code " value = " <?php if ( isset( $permalinks['attribute_base'] ) ) echo esc_attr( $permalinks['attribute_base'] ); ?> " />< code >/ attribute - name / attribute /</ code >
< ? php
}
/**
2015-02-04 16:27:06 +00:00
* Show the settings .
2013-07-24 16:01:36 +00:00
*/
public function settings () {
2015-10-05 11:15:35 +00:00
echo wpautop ( __ ( 'These settings control the permalinks used specifically for products.' , 'woocommerce' ) );
2013-07-24 16:01:36 +00:00
2015-10-05 11:15:35 +00:00
$permalinks = get_option ( 'woocommerce_permalinks' );
2016-02-09 09:55:37 +00:00
$product_permalink = isset ( $permalinks [ 'product_base' ] ) ? $permalinks [ 'product_base' ] : '' ;
2013-07-24 16:01:36 +00:00
// Get shop page
2014-11-30 06:52:32 +00:00
$shop_page_id = wc_get_page_id ( 'shop' );
$base_slug = urldecode ( ( $shop_page_id > 0 && get_post ( $shop_page_id ) ) ? get_page_uri ( $shop_page_id ) : _x ( 'shop' , 'default-slug' , 'woocommerce' ) );
$product_base = _x ( 'product' , 'default-slug' , 'woocommerce' );
2013-07-24 16:01:36 +00:00
$structures = array (
0 => '' ,
2015-10-05 11:15:35 +00:00
1 => '/' . trailingslashit ( $base_slug ),
2 => '/' . trailingslashit ( $base_slug ) . trailingslashit ( '%product_cat%' )
2013-07-24 16:01:36 +00:00
);
?>
2015-10-05 11:15:35 +00:00
< table class = " form-table wc-permalink-structure " >
2013-07-24 16:01:36 +00:00
< tbody >
< tr >
2015-05-19 12:54:35 +00:00
< th >< label >< input name = " product_permalink " type = " radio " value = " <?php echo esc_attr( $structures[0] ); ?> " class = " wctog " < ? php checked ( $structures [ 0 ], $product_permalink ); ?> /> <?php _e( 'Default', 'woocommerce' ); ?></label></th>
2015-10-05 11:15:35 +00:00
< td >< code class = " default-example " >< ? php echo esc_html ( home_url () ); ?> /?product=sample-product</code> <code class="non-default-example"><?php echo esc_html( home_url() ); ?>/<?php echo esc_html( $product_base ); ?>/sample-product/</code></td>
2013-07-24 16:01:36 +00:00
</ tr >
< ? php if ( $shop_page_id ) : ?>
< tr >
2015-10-05 11:15:35 +00:00
< th >< label >< input name = " product_permalink " type = " radio " value = " <?php echo esc_attr( $structures[1] ); ?> " class = " wctog " < ? php checked ( $structures [ 1 ], $product_permalink ); ?> /> <?php _e( 'Shop base', 'woocommerce' ); ?></label></th>
2015-05-19 12:54:35 +00:00
< td >< code >< ? php echo esc_html ( home_url () ); ?> /<?php echo esc_html( $base_slug ); ?>/sample-product/</code></td>
2013-07-24 16:01:36 +00:00
</ tr >
< tr >
2015-10-05 11:15:35 +00:00
< th >< label >< input name = " product_permalink " type = " radio " value = " <?php echo esc_attr( $structures[2] ); ?> " class = " wctog " < ? php checked ( $structures [ 2 ], $product_permalink ); ?> /> <?php _e( 'Shop base with category', 'woocommerce' ); ?></label></th>
2015-05-19 12:54:35 +00:00
< td >< code >< ? php echo esc_html ( home_url () ); ?> /<?php echo esc_html( $base_slug ); ?>/product-category/sample-product/</code></td>
2013-07-24 16:01:36 +00:00
</ tr >
< ? php endif ; ?>
< tr >
< th >< label >< input name = " product_permalink " id = " woocommerce_custom_selection " type = " radio " value = " custom " class = " tog " < ? php checked ( in_array ( $product_permalink , $structures ), false ); ?> />
< ? php _e ( 'Custom Base' , 'woocommerce' ); ?> </label></th>
< td >
< input name = " product_permalink_structure " id = " woocommerce_permalink_structure " type = " text " value = " <?php echo esc_attr( $product_permalink ); ?> " class = " regular-text code " > < span class = " description " >< ? php _e ( 'Enter a custom base to use. A base <strong>must</strong> be set or WordPress will use default instead.' , 'woocommerce' ); ?> </span>
</ td >
</ tr >
</ tbody >
</ table >
< script type = " text/javascript " >
2014-11-30 06:52:32 +00:00
jQuery ( function () {
2013-07-24 16:01:36 +00:00
jQuery ( 'input.wctog' ) . change ( function () {
2014-11-30 06:52:32 +00:00
jQuery ( '#woocommerce_permalink_structure' ) . val ( jQuery ( this ) . val () );
2013-07-24 16:01:36 +00:00
});
2015-10-05 11:15:35 +00:00
jQuery ( '.permalink-structure input' ) . change ( function () {
jQuery ( '.wc-permalink-structure' ) . find ( 'code.non-default-example, code.default-example' ) . hide ();
if ( jQuery ( this ) . val () ) {
jQuery ( '.wc-permalink-structure code.non-default-example' ) . show ();
jQuery ( '.wc-permalink-structure input' ) . removeAttr ( 'disabled' );
} else {
jQuery ( '.wc-permalink-structure code.default-example' ) . show ();
jQuery ( '.wc-permalink-structure input:eq(0)' ) . click ();
jQuery ( '.wc-permalink-structure input' ) . attr ( 'disabled' , 'disabled' );
}
});
jQuery ( '.permalink-structure input:checked' ) . change ();
2014-11-30 06:52:32 +00:00
jQuery ( '#woocommerce_permalink_structure' ) . focus ( function (){
2013-07-24 16:01:36 +00:00
jQuery ( '#woocommerce_custom_selection' ) . click ();
2014-11-30 06:52:32 +00:00
} );
} );
2013-07-24 16:01:36 +00:00
</ script >
< ? php
}
/**
2015-02-04 16:27:06 +00:00
* Save the settings .
2013-07-24 16:01:36 +00:00
*/
public function settings_save () {
2014-11-30 06:52:32 +00:00
2014-06-04 06:46:21 +00:00
if ( ! is_admin () ) {
2013-07-24 16:01:36 +00:00
return ;
2014-06-04 06:46:21 +00:00
}
2013-07-24 16:01:36 +00:00
// We need to save the options ourselves; settings api does not trigger save for the permalinks page
if ( isset ( $_POST [ 'permalink_structure' ] ) || isset ( $_POST [ 'category_base' ] ) && isset ( $_POST [ 'product_permalink' ] ) ) {
// Cat and tag bases
2014-06-04 06:46:21 +00:00
$woocommerce_product_category_slug = wc_clean ( $_POST [ 'woocommerce_product_category_slug' ] );
$woocommerce_product_tag_slug = wc_clean ( $_POST [ 'woocommerce_product_tag_slug' ] );
2013-11-25 13:34:21 +00:00
$woocommerce_product_attribute_slug = wc_clean ( $_POST [ 'woocommerce_product_attribute_slug' ] );
2015-10-05 11:15:35 +00:00
$permalinks = get_option ( 'woocommerce_permalinks' );
2014-09-20 19:52:30 +00:00
2014-06-04 06:46:21 +00:00
if ( ! $permalinks ) {
2013-07-24 16:01:36 +00:00
$permalinks = array ();
2014-06-04 06:46:21 +00:00
}
2013-07-24 16:01:36 +00:00
2014-11-30 06:52:32 +00:00
$permalinks [ 'category_base' ] = untrailingslashit ( $woocommerce_product_category_slug );
$permalinks [ 'tag_base' ] = untrailingslashit ( $woocommerce_product_tag_slug );
$permalinks [ 'attribute_base' ] = untrailingslashit ( $woocommerce_product_attribute_slug );
2013-07-24 16:01:36 +00:00
// Product base
2013-11-25 13:34:21 +00:00
$product_permalink = wc_clean ( $_POST [ 'product_permalink' ] );
2013-07-24 16:01:36 +00:00
2015-10-05 11:15:35 +00:00
if ( 'custom' === $product_permalink ) {
2014-02-14 10:43:15 +00:00
// Get permalink without slashes
$product_permalink = trim ( wc_clean ( $_POST [ 'product_permalink_structure' ] ), '/' );
// This is an invalid base structure and breaks pages
if ( '%product_cat%' == $product_permalink ) {
$product_permalink = _x ( 'product' , 'slug' , 'woocommerce' ) . '/' . $product_permalink ;
}
// Prepending slash
$product_permalink = '/' . $product_permalink ;
2013-07-24 16:01:36 +00:00
} elseif ( empty ( $product_permalink ) ) {
$product_permalink = false ;
}
$permalinks [ 'product_base' ] = untrailingslashit ( $product_permalink );
2014-06-04 06:46:21 +00:00
// Shop base may require verbose page rules if nesting pages
$shop_page_id = wc_get_page_id ( 'shop' );
2014-10-06 09:55:45 +00:00
$shop_permalink = ( $shop_page_id > 0 && get_post ( $shop_page_id ) ) ? get_page_uri ( $shop_page_id ) : _x ( 'shop' , 'default-slug' , 'woocommerce' );
2014-11-30 06:52:32 +00:00
2014-06-04 06:46:21 +00:00
if ( $shop_page_id && trim ( $permalinks [ 'product_base' ], '/' ) === $shop_permalink ) {
$permalinks [ 'use_verbose_page_rules' ] = true ;
}
2013-07-24 16:01:36 +00:00
update_option ( 'woocommerce_permalinks' , $permalinks );
}
}
}
endif ;
2014-09-20 19:52:30 +00:00
return new WC_Admin_Permalink_Settings ();