/**
* 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 14584 entries.
Content Wat Moet Ik Weten Over Spelen Bij Buitenlandse Casino’s? Hoe Kiezen Wij Het Beste Ideal Casino? Buitenlandse Casino’s Betalen Belasting, Maar Niet Aan Nederland Veiligheid En Betrouwbaarheid Hoe Zit Het Met De Wetgeving En Vergunningen Vehicle Buitenlandse Online Casino’s? Online Krasloten Wat Is Het Beste Buitenlandse Casino Voor Nederlanders? 711 Nl – Betrouwbaar Nederlands […]
Slottica Casino Slottica Casino to licencjonowana platforma hazardowa online, która od 2019 roku dostarcza rozrywkę graczom na całym świecie. Działamy legalnie na podstawie licencji Curaçao (nr 5536/JAZ), co gwarantuje uczciwość i bezpieczeństwo rozgrywki. Zaufanie, jakim obdarzają nas gracze z różnych krajów, odzwierciedla się w naszych statystykach: 62% użytkowników pochodzi z Chile, 13% z Brazylii, 7% […]
Content Comment Choisir Une Machine À Sous Au Gambling Establishment? Top Casinos En Ligne Comment Choisir Un Gambling Establishment En Ligne Fiable? Slots Phones Vs Pc: L’expérience Est-elle Semblable? Vidéo Poker Fonctionnalités Interactives Les Meilleures Machines À Sous Gratuites Sans Téléchargement Volatilité Vous découvrirez également comment ces amusements peuvent être leur excellente manière de s’entraîner […]
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