File: /var/www/wp-content/plugins/elementor-pro/modules/woocommerce/settings/settings-woocommerce.php
<?php
namespace ElementorPro\Modules\Woocommerce\Settings;
use Elementor\Core\Base\Document;
use Elementor\Controls_Manager;
use Elementor\Core\Kits\Documents\Tabs\Tab_Base;
use ElementorPro\Plugin;
use ElementorPro\Modules\QueryControl\Module as QueryModule;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class Settings_Woocommerce extends Tab_Base {
public function get_id() {
return 'settings-woocommerce';
}
public function get_title() {
return esc_html__( 'WooCommerce', 'elementor-pro' );
}
public function get_icon() {
return 'eicon-woo-settings';
}
public function get_group() {
return 'settings';
}
public function get_help_url() {
return 'https://go.elementor.com/global-woocommerce';
}
protected function register_tab_controls() {
$this->start_controls_section(
'section_woocommerce_pages',
[
'label' => esc_html__( 'WooCommerce Pages', 'elementor-pro' ),
'tab' => $this->get_id(),
]
);
$this->add_control(
'woocommerce_pages_intro',
[
'raw' => esc_html__( 'Select the pages you want to use as your default WooCommerce shop pages', 'elementor-pro' ),
'type' => Controls_Manager::RAW_HTML,
'content_classes' => 'elementor-descriptor',
]
);
$autocomplete = [
'object' => QueryModule::QUERY_OBJECT_POST,
'query' => [
'post_type' => [ 'page' ],
],
];
$this->add_control(
'woocommerce_cart_page_id',
[
'label' => esc_html__( 'Cart', 'elementor-pro' ),
'type' => QueryModule::QUERY_CONTROL_ID,
'select2options' => [
'placeholder' => esc_html__( 'Select a page', 'elementor-pro' ),
],
'autocomplete' => $autocomplete,
'default' => get_option( 'woocommerce_cart_page_id' ),
]
);
$this->add_control(
'woocommerce_checkout_page_id',
[
'label' => esc_html__( 'Checkout', 'elementor-pro' ),
'type' => QueryModule::QUERY_CONTROL_ID,
'select2options' => [
'placeholder' => esc_html__( 'Select a page', 'elementor-pro' ),
],
'autocomplete' => $autocomplete,
'default' => get_option( 'woocommerce_checkout_page_id' ),
]
);
$this->add_control(
'woocommerce_myaccount_page_id',
[
'label' => esc_html__( 'My Account', 'elementor-pro' ),
'type' => QueryModule::QUERY_CONTROL_ID,
'select2options' => [
'placeholder' => esc_html__( 'Select a page', 'elementor-pro' ),
],
'autocomplete' => $autocomplete,
'default' => get_option( 'woocommerce_myaccount_page_id' ),
]
);
$this->add_control(
'woocommerce_terms_page_id',
[
'label' => esc_html__( 'Terms & Conditions', 'elementor-pro' ),
'type' => QueryModule::QUERY_CONTROL_ID,
'select2options' => [
'placeholder' => esc_html__( 'Select a page', 'elementor-pro' ),
],
'autocomplete' => $autocomplete,
'default' => get_option( 'woocommerce_terms_page_id' ),
]
);
$this->add_control(
'woocommerce_pages_notice',
[
'type' => Controls_Manager::RAW_HTML,
'raw' => esc_html__( 'Note: Changes you make here will also be reflected in the WooCommerce settings on your WP dashboard', 'elementor-pro' ),
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
]
);
$this->end_controls_section();
}
public function on_save( $data ) {
if (
! isset( $data['settings']['post_status'] ) ||
Document::STATUS_PUBLISH !== $data['settings']['post_status'] ||
// Should check for the current action to avoid infinite loop
// when updating options like: "blogname" and "blogdescription".
strpos( current_action(), 'update_option_' ) === 0
) {
return;
}
$ec_wc_key_mapping = [
'woocommerce_cart_page_id' => 'woocommerce_cart_page_id',
'woocommerce_checkout_page_id' => 'woocommerce_checkout_page_id',
'woocommerce_myaccount_page_id' => 'woocommerce_myaccount_page_id',
'woocommerce_terms_page_id' => 'woocommerce_terms_page_id',
];
foreach ( $ec_wc_key_mapping as $ec_key => $wc_key ) {
if ( array_key_exists( $ec_key, $data['settings'] ) ) {
$value = $data['settings'][ $ec_key ] ? $data['settings'][ $ec_key ] : '';
update_option( $wc_key, $value );
}
}
}
}