if(!defined('ABSPATH')){
die('HACKING ATTEMPT!');
}
$softaculous_pro_settings = get_option('softaculous_pro_settings', array());
if(!empty($softaculous_pro_settings['disable_comments'])){
include_once SOFTACULOUS_PRO_PLUGIN_PATH . '/main/disable-comments.php';
}
if(is_admin() && empty($softaculous_pro_settings['disable_ai'])){
add_action('enqueue_block_editor_assets', '\SoftWP\AI::enqueue_scripts');
// AJAX ACTIONS
add_action('wp_ajax_softaculous_ai_generation', '\SoftWP\AI::generate');
add_action('wp_ajax_softaculous_ai_history', '\SoftWP\AI::load_history');
}
$spro_page = softaculous_pro_optGET('page');
if(is_admin() && !empty($spro_page) && $spro_page == 'assistant'){
$spro_act = softaculous_pro_optGET('act');
if(!empty($spro_act) && $spro_act == 'onboarding'){
include_once(SOFTACULOUS_PRO_PLUGIN_PATH . '/main/onboarding.php');
}
}
function softaculous_pro_activation_hook(){
softaculous_pro_update_check();
}
function softaculous_pro_deactivation_hook() {
}
function softaculous_pro_uninstall_hook() {
delete_option('softaculous_pro_version');
delete_option('softaculous_pro_settings');
delete_option('softaculous_pro_onboarding_notice_dismiss');
delete_option('softaculous_pro_ai_notice_dismiss');
delete_option('softaculous_pro_onboarding_done');
delete_option('softaculous_pro_onboarding_dismiss');
delete_option('softaculous_pro_setup_info');
delete_option('softaculous_pro_onboarding_shown');
wp_clear_scheduled_hook('softaculous_pro_ai_history_cron');
}
function softaculous_pro_load_plugin(){
global $softaculous_pro, $softaculous_pro_settings, $spro_tours;
add_action('softaculous_pro_ai_history_cron', '\SoftWP\AI::delete_history'); // Cron for AI History deletion
if(!is_admin()){
return false;
}
// Do we have to redirect the user to onboarding ?
if(is_admin() && current_user_can('administrator') && !wp_doing_ajax() && (empty($_GET['act']) || ($_GET['act'] != 'onboarding' && $_GET['act'] != 'license'))){
$spro_is_dismissed = get_option('softaculous_pro_onboarding_dismiss');
$spro_is_done = get_option('softaculous_pro_onboarding_done');
$spro_is_shown = get_option('softaculous_pro_onboarding_shown');
if(empty($spro_is_dismissed) && empty($spro_is_done) && empty($spro_is_shown)){
wp_safe_redirect(admin_url('admin.php?page=assistant&act=onboarding'));
exit(0);
}
}
softaculous_pro_load_license();
softaculous_pro_rebranding();
// Show key details in Plugins data
add_filter('plugin_row_meta', 'softaculous_pro_add_plugin_row_links', 10, 2);
// Check for updates
include_once(SOFTACULOUS_PRO_PLUGIN_PATH.'/lib/plugin-update-checker.php');
$softaculous_pro_updater = SoftaculousPro_PucFactory::buildUpdateChecker(softaculous_pro_api_url().'updates.php?version='.SOFTACULOUS_PRO_VERSION.'&url='.rawurlencode(site_url()), SOFTACULOUS_PRO_FILE);
// Add the license key to query arguments
$softaculous_pro_updater->addQueryArgFilter('softaculous_pro_updater_filter_args');
// Show the text to install the license key
add_filter('puc_manual_final_check_link-softaculous-pro', 'softaculous_pro_updater_check_link', 10, 1);
softaculous_pro_update_check();
// Register AI Post type
add_action('init', 'softaculous_pro_register_post_type');
$spro_tours = array('assistant' => 'admin.php?page=assistant', 'sidebar' => 'admin.php?page=assistant', 'dashboard' => 'index.php', 'plugins' => 'plugins.php', 'themes' => 'themes.php', 'users' => 'users.php', 'pages' => 'edit.php?post_type=page', 'posts' => 'edit.php');
// Enqueues scripts and styles
if(softaculous_pro_can_enqueue_assets()){
add_action('admin_init', 'softaculous_pro_admin');
add_action('admin_enqueue_scripts', 'softaculous_pro_enqueue_scripts');
}
if(is_admin() && !empty($_GET['page']) && $_GET['page'] == 'assistant'){
add_filter('screen_options_show_screen', '__return_false');
}
add_action('admin_notices', 'softaculous_pro_license_notice');
// Are you the Admin ?
if(current_user_can('administrator')){
if(softaculous_pro_is_display_notice()){
add_action('admin_notices', 'softaculous_pro_admin_notice');
}
add_action('wp_ajax_softaculous_pro_dismissnotice', 'softaculous_pro_dismiss_notice');
// This adds the left menu in WordPress Admin page
add_action('admin_menu', 'softaculous_pro_admin_menu', 5);
include_once SOFTACULOUS_PRO_PLUGIN_PATH . '/main/admin.php';
add_action('admin_print_footer_scripts', 'softaculous_pro_assistant', 5);
add_action('wp_ajax_softaculous_pro_wp_ajax', 'softaculous_pro_wp_ajax');
add_action('admin_menu', 'softaculous_pro_remove_admin_elements');
// Template Installation related ajax calls
add_action('wp_ajax_softaculous_pro_template_info', 'softaculous_pro_templates_ajax');
add_action('wp_ajax_softaculous_pro_start_install_template', 'softaculous_pro_templates_ajax');
add_action('wp_ajax_softaculous_pro_selected_plugin_install', 'softaculous_pro_templates_ajax');
add_action('wp_ajax_softaculous_pro_download_template', 'softaculous_pro_templates_ajax');
add_action('wp_ajax_softaculous_pro_import_template', 'softaculous_pro_templates_ajax');
// Setup information
add_action('wp_ajax_softaculous_pro_setup_info', 'softaculous_pro_templates_ajax');
// dismiss
add_action('wp_ajax_softaculous_pro_onboarding_dismiss', 'softaculous_pro_templates_ajax');
add_action('wp_ajax_softaculous_pro_option_value', 'softaculous_pro_templates_ajax');
}
// Manage Media hooks
if(is_admin() && empty($softaculous_pro_settings['disable_manage_media']) && current_user_can('upload_files') /* && !empty($post) && !empty($post->post_type) && $post->post_type == 'attachment' */){
add_action('add_meta_boxes_attachment', '\SoftWP\Media::register_meta_box');
// ajax calls
add_action('wp_ajax_softaculous_pro_upload_photopea_image', '\SoftWP\Media::upload_photopea_image');
add_action('wp_ajax_softaculous_pro_calculate_compressed_size', '\SoftWP\Media::calculate_compressed_size');
add_action('wp_ajax_softaculous_pro_replace_compressed_image', '\SoftWP\Media::replace_compressed_image');
}
}
function softaculous_pro_templates_ajax() {
if(!current_user_can('administrator')){
return false;
}
include_once(dirname(__FILE__).'/onboarding.php');
if($_REQUEST['action'] == 'softaculous_pro_template_info'){
softaculous_pro_ajax_template_info();
}
if($_REQUEST['action'] == 'softaculous_pro_selected_plugin_install'){
softaculous_pro_ajax_selected_plugin();
}
if($_REQUEST['action'] == 'softaculous_pro_start_install_template'){
softaculous_pro_ajax_start_install_template();
}
if($_REQUEST['action'] == 'softaculous_pro_download_template'){
softaculous_pro_ajax_download_template();
}
if($_REQUEST['action'] == 'softaculous_pro_import_template'){
softaculous_pro_ajax_import_template();
}
if($_REQUEST['action'] == 'softaculous_pro_setup_info'){
softaculous_pro_save_setup_info();
}
if($_REQUEST['action'] == 'softaculous_pro_option_value'){
softaculous_pro_get_options();
}
if($_REQUEST['action'] == 'softaculous_pro_onboarding_dismiss'){
softaculous_pro_onboarding_dismiss();
}
}
function softaculous_pro_remove_admin_elements(){
if(!empty($_GET['page']) && $_GET['page'] === 'assistant'){
remove_all_actions('admin_notices');
remove_all_actions('all_admin_notices');
}
}
// Update check
function softaculous_pro_update_check(){
global $softaculous_pro_settings;
$current_version = get_option('softaculous_pro_version', 0);
$version = (int) str_replace('.', '', $current_version);
if($current_version == SOFTACULOUS_PRO_VERSION){
return true;
}
// AI is enabled by default so the cron to delete AI history should be added at activation.
wp_schedule_event(time(), 'daily', 'softaculous_pro_ai_history_cron');
if(empty($softaculous_pro_settings) || !isset($softaculous_pro_settings['ai_history_duration'])){
$softaculous_pro_settings['ai_history_duration'] = 90; // Setting default AI history duration.
update_option('softaculous_pro_settings', $softaculous_pro_settings);
}
// Save the new Version
update_option('softaculous_pro_version', SOFTACULOUS_PRO_VERSION);
}
function softaculous_pro_admin(){
global $spro_tours;
include_once SOFTACULOUS_PRO_PLUGIN_PATH . '/main/admin.php';
}
// Shows the admin menu of Softaculous
function softaculous_pro_admin_menu() {
$capability = 'activate_plugins';// TODO : Capability for accessing this page
// Add the menu page
add_menu_page(__('Assistant'), __('Assistant', 'softaculous-pro'), $capability, 'assistant', 'softaculous_pro_page_handler', 'dashicons-businessperson', 1);
}
// The Softaculous Settings Page
function softaculous_pro_page_handler(){
global $softaculous_pro;
if(!current_user_can('manage_options')){
wp_die('Sorry, but you do not have permissions to change settings.');
}
$act = softaculous_pro_optGET('act');
switch($act){
case 'onboarding':
include_once(SOFTACULOUS_PRO_PLUGIN_PATH . '/main/setup.php');
break;
case 'license':
include_once(SOFTACULOUS_PRO_PLUGIN_PATH . '/main/license.php');
softaculous_pro_license();
break;
case 'manage-plugins':
include_once(SOFTACULOUS_PRO_PLUGIN_PATH . '/main/manage-plugins.php');
softaculous_pro_manage_plugins();
break;
case 'media-replace':
\SoftWP\Media::replace_media_page();
break;
default:
include_once(dirname(__FILE__).'/admin.php');
softaculous_pro_page_settings();
}
}
function softaculous_pro_can_enqueue_assets(){
global $spro_tours;
if(!is_admin()){
return false;
}
$current_page = basename($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if(!empty($_COOKIE['spro-load-tour']) && (!empty($spro_tours)) && array_key_exists($_COOKIE['spro-load-tour'], $spro_tours) && $current_page == $spro_tours[$_COOKIE['spro-load-tour']]){
return $_COOKIE['spro-load-tour'];
}
$is_admin_page = basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if(!empty($_GET['page']) && $_GET['page'] == 'assistant' && $is_admin_page == 'admin.php'){
return true;
}
return false;
}
function softaculous_pro_enqueue_scripts(){
wp_enqueue_style('softaculous-pro-style-admin', SOFTACULOUS_PRO_PLUGIN_URL . '/assets/css/admin.css', [], SOFTACULOUS_PRO_VERSION);
wp_enqueue_style('softaculous-pro-style-intro', SOFTACULOUS_PRO_PLUGIN_URL . '/assets/css/intro.css', [], SOFTACULOUS_PRO_VERSION);
wp_enqueue_style( 'softaculous-pro-style-font-awesome', SOFTACULOUS_PRO_PLUGIN_URL . '/assets/font-awesome/css/all.min.css', [], SOFTACULOUS_PRO_VERSION, 'all' );
wp_enqueue_script('softaculous-pro-script-admin', SOFTACULOUS_PRO_PLUGIN_URL . '/assets/js/admin.js', [], SOFTACULOUS_PRO_VERSION, true);
wp_enqueue_script('softaculous-pro-script-intro', SOFTACULOUS_PRO_PLUGIN_URL . '/assets/js/intro.js', [], SOFTACULOUS_PRO_VERSION, false);
wp_localize_script('softaculous-pro-script-admin', 'soft_pro_obj', array(
'admin_url' => esc_url(admin_url()),
'site_url' => esc_url(site_url()),
'nonce' => wp_create_nonce('softaculous_pro_js_nonce'),
'ajax_url' => admin_url('admin-ajax.php')
));
}
/**
* Display Softaculous notice on the basis of last dismiss date. When user manually dismisses the notice, it remains for 1 month
*
* @since 1.0
*/
function softaculous_pro_is_display_notice(){
$soft_dismissable_notice_date = get_option('softaculous_pro_dismiss_notice_date');
if(empty($soft_dismissable_notice_date)){
return true;
}
$soft_dismissable_notice_date2 = new DateTime($soft_dismissable_notice_date);
$current_date = new DateTime(date('Y-m-d'));
$date_diff_month = $soft_dismissable_notice_date2->diff($current_date);
//Do not display notice again for a month
if($date_diff_month->m < 1){
return false;
}
return true;
}
/**
* Display Softaculous notice in dashboard
*
* @since 1.0
*/
function softaculous_pro_admin_notice($force = 0){
if(!empty($_GET['page']) && $_GET['page'] == 'softaculous' && empty($force)){
return '';
}
return '';
}
function softaculous_pro_license_notice(){
global $softaculous_pro;
if(is_admin() && current_user_can('activate_plugins') && !wp_doing_ajax()){
$spro_add_nonce_vars = 0;
if(empty($softaculous_pro['license']['license'])){
$msg = sprintf(__('Your SoftWP plugin is %1$s. Please enter the license key here.', 'softaculous-pro'),
'Unlicensed',
admin_url('admin.php?page=assistant&act=license')
);
}else{
if(!empty($softaculous_pro['license']['url_mismatch'])){
$msg = sprintf(__('Your SoftWP plugin license is not authorized to be used on %1$s. You can generate a new license for your domain from the %2$s panel.', 'softaculous-pro'),
site_url(),
($softaculous_pro['branding']['sn'] == 'SoftWP' ? 'Softaculous' : $softaculous_pro['branding']['sn'])
);
}elseif(empty($softaculous_pro['license']['active'])){
$msg = sprintf(__('Your SoftWP plugin license has %1$s. Please renew your license for uninterrupted updates and support.', 'softaculous-pro'),
'Expired'
);
}
}
if(!empty($msg)){
echo '
';
}
// The notice to complete onboarding
//$spro_is_shown = get_option('softaculous_pro_onboarding_shown');
$spro_is_done = get_option('softaculous_pro_onboarding_done');
$spro_is_dismissed = get_option('softaculous_pro_onboarding_notice_dismiss');
if(empty($spro_is_done) && empty($spro_is_dismissed)){
echo '
Your Onboarding process is not completed yet! Click here to complete the simple setup process and build your site in a few steps.
';
$spro_add_nonce_vars = 1;
}
$softwp_ai_is_dismissed = get_option('softaculous_pro_ai_notice_dismiss');
if(empty($softwp_ai_is_dismissed) && !empty($_GET['page']) && $_GET['page'] == 'assistant'){
echo '
';
$spro_add_nonce_vars = 1;
}
if(!empty($spro_add_nonce_vars)){
echo '';
}
}
return '';
}
function softaculous_pro_get_option($option_name, $default_value = false, $site_id = null){
if($site_id !== null && is_multisite()){
return get_site_option($option_name, $default_value);
}
return get_option($option_name, $default_value);
}
/**
* Takes care of Slashes
*
* @param string $string The string that will be processed
* @return string A string that is safe to use for Database Queries, etc
* @since 1.0
*/
function softaculous_pro_inputsec($string){
//get_magic_quotes_gpc is deprecated in php 7.4
if(version_compare(PHP_VERSION, '7.4', '<')){
if(!get_magic_quotes_gpc()){
$string = addslashes($string);
}else{
$string = stripslashes($string);
$string = addslashes($string);
}
}else{
$string = addslashes($string);
}
// This is to replace ` which can cause the command to be executed in exec()
$string = str_replace('`', '\`', $string);
return $string;
}
/**
* Converts Special characters to html entities
*
* @param string $string The string containing special characters
* @return string A string containing special characters replaced by html entities of the format ASCIICODE;
* @since 1.0
*/
function softaculous_pro_htmlizer($string){
$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
preg_match_all('/(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)/', $string, $matches);
foreach($matches[1] as $mk => $mv){
$tmp_m = softaculous_pro_entity_check($matches[2][$mk]);
$string = str_replace($matches[1][$mk], $tmp_m, $string);
}
return $string;
}
/**
* Used in function htmlizer()
*
* @param string $string
* @return string
* @since 1.0
*/
function softaculous_pro_entity_check($string){
//Convert Hexadecimal to Decimal
$num = ((substr($string, 0, 1) === 'x') ? hexdec(substr($string, 1)) : (int) $string);
//Squares and Spaces - return nothing
$string = (($num > 0x10FFFF || ($num >= 0xD800 && $num <= 0xDFFF) || $num < 0x20) ? '' : ''.$num.';');
return $string;
}
/**
* OPTIONAL REQUEST of the given REQUEST Key
*
* @param string $name The key of the $_REQUEST array i.e. the name of the input / textarea text
* @param string $default The value to return if the $_REQUEST[$name] is NOT SET
* @return string Returns the string if the REQUEST is there otherwise the default value given.
* @since 1.0
*/
function softaculous_pro_optREQ($name, $default = ''){
global $softaculous_error;
//Check the POSTED NAME was posted
if(isset($_REQUEST[$name])){
return trim(sanitize_text_field($_REQUEST[$name]));
}else{
return $default;
}
}
/**
* OPTIONAL POST of the given POST Key
*
* @param string $name The key of the $_POST array i.e. the name of the input / textarea text
* @param string $default The value to return if the $_POST[$name] is NOT SET
* @return string Returns the string if the POST is there otherwise the default value given.
* @since 1.4.6
*/
function softaculous_pro_optPOST($name, $default = ''){
global $softaculous_error;
//Check the POSTED NAME was posted
if(isset($_POST[$name])){
if(is_array($_POST[$name])){
$values = array_map('trim', $_POST[$name]);
return array_map('sanitize_text_field', $values);
}
return trim(sanitize_text_field($_POST[$name]));
}else{
return $default;
}
}
/**
* OPTIONAL GET of the given GET Key i.e. dont throw a error if not there
*
* @param string $name The key of the $_GET array i.e. the name of the input / textarea text
* @param string $default The value to return if the $_GET[$name] is NOT SET
* @return string Returns the string if the GET is there otherwise the default value given.
* @since 1.0
*/
function softaculous_pro_optGET($name, $default = ''){
global $softaculous_error;
//Check the GETED NAME was GETed
if(isset($_GET[$name])){
return trim(sanitize_text_field($_GET[$name]));
}else{
return $default;
}
}
function softaculous_pro_sp_api_url($main_server = 0){
global $softaculous_pro;
return softaculous_pro_api_url($main_server, 'sitepad');
}
function softaculous_pro_pfx_api_url($main_server = 0){
global $softaculous_pro;
return softaculous_pro_api_url($main_server, 'popularfx');
}
function softaculous_pro_api_url($main_server = 0, $suffix = ''){
global $softaculous_pro;
$r = array(
'https://s0.softaculous.com/a/softwp/',
'https://s1.softaculous.com/a/softwp/',
'https://s2.softaculous.com/a/softwp/',
'https://s3.softaculous.com/a/softwp/',
'https://s4.softaculous.com/a/softwp/',
'https://s5.softaculous.com/a/softwp/',
'https://s7.softaculous.com/a/softwp/',
'https://s8.softaculous.com/a/softwp/'
);
$mirror = $r[array_rand($r)];
// If the license is newly issued, we need to fetch from API only
if(!empty($main_server) || empty($softaculous_pro['license']['last_edit']) ||
(!empty($softaculous_pro['license']['last_edit']) && (time() - 3600) < $softaculous_pro['license']['last_edit'])
){
$mirror = 'https://a.softaculous.com/softwp/';
}
// -1 indicates that we need to force the mirror server used for rendering static files e.g. screenshots
if(!empty($main_server) && $main_server == '-1'){
$mirror = $r[array_rand($r)];
}
if(!empty($suffix)){
$mirror = str_replace('/softwp', '/'.$suffix, $mirror);
}
return $mirror;
}
// Load license data
function softaculous_pro_load_license(){
global $softaculous_pro;
// Load license
$softaculous_pro['license'] = get_option('softaculous_pro_license', array());
if(empty($softaculous_pro['license'])){
return false;
}
$prods = apply_filters('softaculous_pro_products', []);
// Update license details as well
if(empty($softaculous_pro['license']['last_update']) ||
(!empty($softaculous_pro['license']['last_update']) && (time() - $softaculous_pro['license']['last_update']) >= 86400)
){
$resp = wp_remote_get(softaculous_pro_api_url(1).'license.php?license='.$softaculous_pro['license']['license'].'&prods='.implode(',', $prods).'&url='.rawurlencode(site_url()));
// Did we get a response ?
if(is_array($resp)){
$tosave = json_decode($resp['body'], true);
// Is it the license ?
if(!empty($tosave['license'])){
$softaculous_pro['license'] = $tosave;
}
}
// Save the old data only
if(empty($tosave['license'])){
$tosave = get_option('softaculous_pro_license', array());
}
$tosave['last_update'] = time();
update_option('softaculous_pro_license', $tosave);
}
return $softaculous_pro['license'];
}
add_filter('softaculous_pro_products', 'softaculous_softwp_pro_products', 10, 1);
function softaculous_softwp_pro_products($r = []){
$r['softwp'] = 'softwp';
return $r;
}
// Load Softaculous rebranding settings
function softaculous_pro_rebranding(){
global $softaculous_pro;
$softaculous_pro['branding']['sn'] = 'SoftWP';
$softaculous_pro['branding']['logo_url'] = SOFTACULOUS_PRO_PLUGIN_URL.'assets/images/logo-white.png';
$softaculous_pro['branding']['rebranded'] = 0;
//Getting info if Softaculous rebranding done or not?
$soft_rebranding = get_option('softaculous_pro_rebranding', '[]');
if(!empty($soft_rebranding['logo_url'])){
$softaculous_pro['branding']['logo_url'] = $soft_rebranding['logo_url'];
}
if(!empty($soft_rebranding['sn']) && $soft_rebranding['sn'] != 'Softaculous'){
$softaculous_pro['branding']['sn'] = $soft_rebranding['sn'];
$softaculous_pro['branding']['rebranded'] = 1;
}
if(!empty($soft_rebranding['default_hf_bg'])){
$softaculous_pro['branding']['default_hf_bg'] = $soft_rebranding['default_hf_bg'];
}
if(!empty($soft_rebranding['default_hf_text'])){
$softaculous_pro['branding']['default_hf_text'] = $soft_rebranding['default_hf_text'];
}
return true;
}
// Add our license key if ANY
function softaculous_pro_updater_filter_args($queryArgs) {
global $softaculous_pro;
if ( !empty($softaculous_pro['license']['license']) ) {
$queryArgs['license'] = $softaculous_pro['license']['license'];
}
return $queryArgs;
}
// Handle the Check for update link and ask to install license key
function softaculous_pro_updater_check_link($final_link){
global $softaculous_pro;
if(empty($softaculous_pro['license']['license'])){
return 'Enter Pro License Key';
}
return $final_link;
}
function softaculous_pro_report_error($error = array()) {
if(empty($error)){
return true;
}
$error_string = '' . esc_html__('Please fix the below error(s):', 'softaculous-pro') . '
';
foreach($error as $ev){
$error_string .= '* ' . esc_html($ev) . '
';
}
echo '';
}
function softaculous_pro_add_plugin_row_links($links, $slug) {
if(is_multisite() && is_network_admin()){
return $links;
}
if ($slug !== SOFTACULOUS_PRO_BASE) {
return $links;
}
if(!current_user_can('activate_plugins')){
return $links;
}
$new_links = array(
'plugins' => 'Explore Pro Plugins',
'tours' => 'Tour',
'ai' => 'AI',
);
$links = array_merge($links, $new_links);
return $links;
}
function softaculous_pro_add_params($link){
global $softaculous_pro;
$link = rtrim($link, '?&');
$query = parse_url($link, PHP_URL_QUERY);
if ($query) {
$link .= '&';
} else {
$link .= '?';
}
$link .= 'version=latest&license='.$softaculous_pro['license']['license'].'&url='.site_url();
return $link;
}
function softaculous_pro_register_post_type(){
register_post_type(
'spro_ai_history',
[
'labels' => [
'name' => __('AI History', 'softaculous-pro'),
'singular_name' => __('AI History', 'softaculous-pro'),
],
'public' => false,
'map_meta_cap' => true,
'hierarchical' => false,
'rewrite' => false,
'query_var' => false,
'can_export' => false,
'delete_with_user' => true,
'supports' => array('author'),
]
);
}
.sc-product-line-item{display:block;font-family:var(--sc-font-sans)}.sc-product-line-item[hidden]{display:none}.sc-product-line-item__item{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;gap:18px;margin:0;min-width:0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;border-bottom:none;width:100%}.sc-product-line-item__item--has-image{-webkit-box-align:center;-ms-flex-align:center;align-items:center;container-type:inline-size}@container (max-width: 290px){.sc-product-line-item__item--has-image__image{display:none}}.sc-product-line-item__item__scratch-price{font-size:90%;opacity:.75;text-decoration:line-through}.sc-product-line-item__text{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin:0;min-width:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.sc-product-line-item__text-details{display:-ms-grid;display:grid}.sc-product-line-item__title{-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:-webkit-box;display:-moz-box;font-size:var(--sc-font-size-medium);font-weight:var(--sc-font-weight-semibold);line-height:var(--sc-line-height-dense);margin:0;min-width:0;-webkit-box-orient:vertical;-webkit-line-clamp:3;-moz-box-lines:3;overflow:hidden;text-overflow:ellipsis}.sc-product-line-item__title,.sc-product-line-item__title:hover{color:inherit;text-decoration:none}.sc-product-line-item__variant{cursor:pointer;display:-webkit-box;display:-moz-box;font-size:var(--sc-font-size-small);font-weight:var(--sc-font-weight-semibold);line-height:var(--sc-line-height-dense);margin:0;-webkit-line-clamp:3;-moz-box-lines:3;overflow:hidden;text-overflow:ellipsis}.sc-product-line-item__suffix,.sc-product-line-item__variant{-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0;-webkit-box-orient:vertical}.sc-product-line-item__suffix{-webkit-box-flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;margin:0 0 0 auto;min-width:100px}.sc-product-line-item__editable .sc-product-line-item__suffix,.sc-product-line-item__removable .sc-product-line-item__suffix{-ms-flex-item-align:start;align-self:flex-start}.sc-product-line-item__price{max-width:100%;text-align:right}.sc-product-line-item__description{color:var(--sc-price-label-color,var(--sc-input-help-text-color));font-size:var(--sc-price-label-font-size,var(--sc-input-help-text-font-size-medium));line-height:var(--sc-line-height-dense)}.sc-product-line-item__image{border:1px solid var(--sc-input-border-color,var(--sc-input-border));border-radius:4px;-webkit-box-shadow:var(--sc-input-box-shadow);box-shadow:var(--sc-input-box-shadow);display:block;height:var(--sc-product-line-item-image-size,4em)!important;-o-object-fit:cover;object-fit:cover;width:var(--sc-product-line-item-image-size,4em);-ms-flex-item-align:start;align-self:flex-start}.sc-product-line-item__image[hidden]{display:none}.sc-product-line-item__product__description{display:-webkit-box;display:-ms-flexbox;display:flex;gap:.5em;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sc-product-line-item__price{font-size:var(--sc-font-size-medium);font-weight:var(--sc-font-weight-semibold)}.sc-product-line-item__price,.sc-product-line-item__price-description{color:var(--sc-input-label-color);line-height:var(--sc-line-height-dense)}.sc-product-line-item__price-description{font-size:var(--sc-font-size-small);opacity:.75}.sc-product-line-item__remove{color:var(--sc-color-gray-400);cursor:pointer;margin-bottom:var(--sc-spacing-small);width:18px}.sc-product-line-item__actions__divider{margin:0 .2em;opacity:.25}.sc-product-line-item__is-rtl__price{text-align:right;text-align:left}.sc-product-line-item__base{display:-ms-grid;display:grid;gap:var(--sc-spacing-x-small)}.sc-product-line-item__fee__description{opacity:.75}