/**
* Related Products
*
* Display a list of related products and/or up-sells
*/
if ( ! defined( 'ABSPATH' ) ) { exit; } // Exit if accessed directly
if( ! class_exists( 'woocommerce' ) )
{
add_shortcode( 'av_product_upsells', 'avia_please_install_woo' );
return;
}
if ( ! class_exists( 'avia_sc_product_upsells' ) )
{
class avia_sc_product_upsells extends aviaShortcodeTemplate
{
/**
* Create the config array for the shortcode button
*/
function shortcode_insert_button()
{
$this->config['version'] = '1.0';
$this->config['self_closing'] = 'yes';
$this->config['name'] = __( 'Related Products', 'avia_framework' );
$this->config['tab'] = __( 'Plugin Additions', 'avia_framework' );
$this->config['icon'] = AviaBuilder::$path['imagesURL'] . 'sc-tabs.png';
$this->config['order'] = 15;
$this->config['target'] = 'avia-target-insert';
$this->config['shortcode'] = 'av_product_upsells';
$this->config['tooltip'] = __( 'Display a list of related products and/or up-sells', 'avia_framework' );
$this->config['drag-level'] = 3;
$this->config['tinyMCE'] = array( 'disable' => 'true' );
$this->config['posttype'] = array( 'product', __( 'This element can only be used on single product pages', 'avia_framework' ) );
$this->config['id_name'] = 'id';
$this->config['id_show'] = 'yes';
$this->config['alb_desc_id'] = 'alb_description';
}
/**
* Popup Elements
*
* If this function is defined in a child class the element automatically gets an edit button, that, when pressed
* opens a modal window that allows to edit the element properties
*
* @return void
*/
function popup_elements()
{
$this->elements = array(
array(
'type' => 'tab_container',
'nodescription' => true
),
array(
'type' => 'tab',
'name' => __( 'Content', 'avia_framework' ),
'nodescription' => true
),
array(
'type' => 'template',
'template_id' => $this->popup_key( 'content_upsells' )
),
array(
'type' => 'tab_close',
'nodescription' => true
),
array(
'type' => 'tab_container_close',
'nodescription' => true
)
);
}
/**
* Create and register templates for easier maintainance
*
* @since 4.6.4
*/
protected function register_dynamic_templates()
{
/**
* Content Tab
* ===========
*/
$c = array(
array(
'name' => __( 'Display options', 'avia_framework' ),
'desc' => __( 'Choose which products you want to display', 'avia_framework' ),
'id' => 'display',
'type' => 'select',
'std' => 'upsells related',
'subtype' => array(
__( 'Display up-sells and related products', 'avia_framework' ) => 'upsells related',
__( 'Display up-sells only', 'avia_framework' ) => 'upsells',
__( 'Display related products only', 'avia_framework' ) => 'related'
)
),
array(
'name' => __( 'Number of items', 'avia_framework' ),
'desc' => __( 'Choose the maximum number of products to display', 'avia_framework' ),
'id' => 'count',
'type' => 'select',
'std' => '4',
'subtype' => array( '1' =>'1', '2' =>'2', '3' =>'3', '4' =>'4', '5' =>'5' )
),
array(
'name' => __( 'WooCommerce Product visibility?', 'avia_framework' ),
'desc' => __( 'Select the visibility of WooCommerce products. Default setting can be set at Woocommerce -> Settings -> Products -> Inventory -> Out of stock visibility. Currently it is only possible to hide products out of stock.', 'avia_framework' ),
'id' => 'wc_prod_visible',
'type' => 'select',
'std' => '',
'subtype' => array(
__( 'Use default WooCommerce Setting (Settings -> Products -> Out of stock visibility)', 'avia_framework' ) => '',
__( 'Hide products out of stock', 'avia_framework' ) => 'hide',
// __( 'Show products out of stock', 'avia_framework' ) => 'show'
)
),
);
AviaPopupTemplates()->register_dynamic_template( $this->popup_key( 'content_upsells' ), $c );
}
/**
* Editor Element - this function defines the visual appearance of an element on the AviaBuilder Canvas
* Most common usage is to define some markup in the $params['innerHtml'] which is then inserted into the drag and drop container
* Less often used: $params['data'] to add data attributes, $params['class'] to modify the className
*
*
* @param array $params this array holds the default values for $content and $args.
* @return $params the return array usually holds an innerHtml key that holds item specific markup.
*/
function editor_element( $params )
{
$params = parent::editor_element( $params );
return $params;
}
/**
* Frontend Shortcode Handler
*
* @param array $atts array of attributes
* @param string $content text within enclosing form of shortcode element
* @param string $shortcodename the shortcode found, when == callback name
* @return string $output returns the modified html string
*/
function shortcode_handler( $atts, $content = '', $shortcodename = '', $meta = '' )
{
global $avia_config, $product;
// fix for seo plugins which execute the do_shortcode() function before everything is loaded
if( ! function_exists( 'WC' ) || ! WC() instanceof WooCommerce || ! is_object( WC()->query ) || ! $product instanceof WC_Product )
{
return '';
}
extract( shortcode_atts( array(
'display' => 'upsells related',
'count' => 4,
'wc_prod_visible' => ''
), $atts, $this->config['shortcode'] ) );
if( ! isset( $meta['el_class'] ) )
{
$meta['el_class'] = '';
}
// force to ignore WC default setting - see hooked function avia_wc_product_is_visible
switch( $wc_prod_visible )
{
case 'show':
$avia_config['woocommerce']['catalog_product_visibility'] = 'show_all';
break;
case 'hide':
$avia_config['woocommerce']['catalog_product_visibility'] = 'hide_out_of_stock';
break;
default:
$avia_config['woocommerce']['catalog_product_visibility'] = 'use_default';
break;
}
$output = '';
// $product = wc_get_product();
$output .= "
";
if( strpos( $display, 'upsells' ) !== false )
{
$output .= avia_woocommerce_output_upsells( $count, $count );
}
if( strpos( $display, 'related' ) !== false )
{
$output .= avia_woocommerce_output_related_products( $count, $count );
}
$output .= '
';
// reset
$avia_config['woocommerce']['catalog_product_visibility'] = 'use_default';
return $output;
}
}
}
About Sónia Nunes This author has yet to write their bio. Meanwhile lets just say that we are proud Sónia Nunes contributed a whooping 14355 entries.
↑ 1 2 85% загрязнений воздуха в Петербурге -выхлопные газы (рус.). ↑ 1 2 3 4 «Атланты построили Петербург»: Как альтернативщики перепридумали историю города (рус.). Как правило это литературные герои, например «Остап Бендер» на Итальянской улице, «Бравый солдат Швейк» на Балканской площади, «Охтенка» в саду Нева и другие. Неудовлетворительным оставался уровень загрязнения рек химическими отходами, […]
Санкт-Петербургская промышленность в 2000-е года столкнулась с кризисом и переходным этапом, когда доля промышленного производства в черте города стремительно сокращалась заменялась непроизводственной экономикой. В 2011 по 2018 года губернатором Петербурга был Георгий Полтавченко. Серьёзной проблемой для Петербурга стало появление множеств частных клиник, практикующих при молчаливом согласии представителей власти псевдомедицину или занимающихся вымогательством денег, запугиванием доверчивых […]
Live-рулетка – одна из самых популярных азартных игр в онлайн казино. Появление технологии видеотрансляции привнесло новую жизнь в игровой процесс, позволяя игрокам наслаждаться атмосферой настоящего казино, не выходя из дома. Игра в рулетку в режиме реального времени стала доступной в Izzi Casino, и сегодня мы рассмотрим основные правила игры, виды ставок и стратегии, которые помогут […]
Scroll to top
Customize
Reject All
Accept All
✖
Necessary cookies enable essential site features like secure log-ins and consent preference adjustments. They do not store personal data.
None
Functional cookies support features like content sharing on social media, collecting feedback, and enabling third-party tools.
None
Analytical cookies track visitor interactions, providing insights on metrics like visitor count, bounce rate, and traffic sources.
None
Advertisement cookies deliver personalized ads based on your previous visits and analyze the effectiveness of ad campaigns.
None
Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies.
None