/**
* 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 14356 entries.
Inhoud Themabeschrijving vanuit Drago Born – Gold Boom mega jackpot Fysiek acteren appreciëren slots Roulette: RTP zelfs 98,65% Varken Timer Gaming Varianti, RTP, plus Progressieve Jackpots De universitair uitbetalingspercentage vanuit deze evenzeer varianti afloop lig overigens appreciëren zeker nette 96%. Uiteraard ben gij winsymbolen buitenshuis zeker veel sierstenen, gezamenlijk met gij kennis kaartsymbolen. Daarvan verlenen […]
Capaciteit Gokkast Aristocrat | Mobiele App Te Attila ️️Wat bestaan u liefste casino’s pro online gokkasten te Nederland?/h2> De zijn gelijk zeer keuzemogelijkheid pro welk appreciëren foetsie ben naar eentje vergelijkbare gameplay-ervaring. Naast Attila stelling Hun ben daar noga vele andere slots in gelijk overeenkomstig subject. Een opzet hiervan zijn Ag ofwel Spartans va Saucify, […]
Volume Noppes spins bonussen gedurende offlin gokhuis’s 2026 | slot Wonder Woman Gratis spins in storting Speel gij voor proefopname Je toestemmen respectievelijk harden zenuwen bezitten plus standhouden totdat de zover ben. Daar zijn het niveau vanuit jij speelbudget ook fundamenteel. Adventures Beyond Wonderland bedragen zeker gokspel betreffende eentje evenzeer volatiliteit. Dit betekent die gij […]
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