1) {
$product_id = AFFL_Shortcode_Context::$product_id;
}
// 3. Try current post
else {
$current_post_id = get_the_ID();
if ($current_post_id && get_post_type($current_post_id) === AFFILILABS_CPT_PRODUCT) {
$product_id = $current_post_id;
}
}
if (!$product_id) {
return null;
}
// Use Context Cache if available
if (AFFL_Shortcode_Context::$product_data && AFFL_Shortcode_Context::$product_data['id'] == $product_id) {
return AFFL_Shortcode_Context::$product_data;
}
return AFFLProductService::get_product_by_id($product_id);
}
/**
* [affl_name id="123"]
*/
function affl_name_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_name');
if (is_string($product_data)) {
return $product_data;
}
return esc_html($product_data['name']);
}
add_shortcode('affl_name', 'affl_name_shortcode');
/**
* [affl_price id="123"]
*/
function affl_price_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_price');
if (is_string($product_data)) {
return $product_data;
}
return esc_html($product_data['price_currency'] . number_format_i18n($product_data['price'], 2));
}
add_shortcode('affl_price', 'affl_price_shortcode');
/**
* [affl_rating id="123"]
*/
function affl_rating_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_rating');
if (is_string($product_data)) {
return $product_data;
}
if (empty($product_data['rating'])) {
return '';
}
return AFFLProductService::get_rating_stars_html(floatval($product_data['rating']));
}
add_shortcode('affl_rating', 'affl_rating_shortcode');
/**
* [affl_description id="123"]
*/
function affl_description_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_description');
if (is_string($product_data)) {
return $product_data;
}
return wp_kses_post($product_data['description']);
}
add_shortcode('affl_description', 'affl_description_shortcode');
/**
* [affl_features id="123"]
*/
function affl_features_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_features');
if (is_string($product_data)) {
return $product_data;
}
if (empty($product_data['short_features'])) {
return '';
}
$items = AFFLProductService::get_list_items_as_array($product_data['short_features']);
$output = '
';
foreach ($items as $item) {
if (!empty($item)) {
$output .= '- ' . esc_html($item) . '
';
}
}
$output .= '
';
return $output;
}
add_shortcode('affl_features', 'affl_features_shortcode');
/**
* [affl_pros id="123"]
*/
function affl_pros_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_pros');
if (is_string($product_data)) {
return $product_data;
}
if (empty($product_data['pros'])) {
return '';
}
$items = AFFLProductService::get_list_items_as_array($product_data['pros']);
$output = '';
foreach ($items as $item) {
if (!empty($item)) {
$output .= '
' . esc_html($item) . ' ';
}
}
$output .= '
';
return $output;
}
add_shortcode('affl_pros', 'affl_pros_shortcode');
/**
* [affl_cons id="123"]
*/
function affl_cons_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_cons');
if (is_string($product_data)) {
return $product_data;
}
if (empty($product_data['cons'])) {
return '';
}
$items = AFFLProductService::get_list_items_as_array($product_data['cons']);
$output = '';
foreach ($items as $item) {
if (!empty($item)) {
$output .= '
' . esc_html($item) . ' ';
}
}
$output .= '
';
return $output;
}
add_shortcode('affl_cons', 'affl_cons_shortcode');
/**
* [affl_category id="123"]
*/
function affl_category_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_category');
if (is_string($product_data)) {
return $product_data;
}
if (empty($product_data['category_names'])) {
return '';
}
return esc_html(implode(', ', $product_data['category_names']));
}
add_shortcode('affl_category', 'affl_category_shortcode');
/**
* [affl_marketplace id="123"]
*/
function affl_marketplace_shortcode($atts) {
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_marketplace');
if (is_string($product_data)) {
return $product_data;
}
return esc_html($product_data['marketplace_name']);
}
add_shortcode('affl_marketplace', 'affl_marketplace_shortcode');
/**
* [affl_image id="123" size="medium"]
*/
function affl_image_shortcode($atts) {
$atts = shortcode_atts(array('id' => 0, 'size' => 'medium'), $atts);
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_image');
if (is_string($product_data)) {
return $product_data;
}
$image_size = sanitize_text_field($atts['size']);
$image_url = get_the_post_thumbnail_url($product_data['id'], $image_size) ?: AFFILILABS_DEFAULT_PRODUCT_IMAGE;
return '
';
}
add_shortcode('affl_image', 'affl_image_shortcode');
/**
* [affl_button id="123" text="Buy Now" color="#0073aa" radius="8"]
*/
function affl_button_shortcode($atts) {
$default_atts = array(
'id' => 0,
'text' => __('Check Product*', 'affililabs'),
'color' => '#0073aa',
'radius' => '8',
'text_color' => '#ffffff',
);
$atts = shortcode_atts($default_atts, $atts);
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_button');
if (is_string($product_data)) {
return $product_data;
}
if (empty($product_data['affiliate_link'])) {
return '';
}
$button_text = sanitize_text_field($atts['text']);
$button_color = sanitize_hex_color($atts['color']) ?: '#0073aa';
$border_radius = intval($atts['radius']);
$text_color = sanitize_hex_color($atts['text_color']) ?: '#ffffff';
return ''
. esc_html($button_text) .
'';
}
add_shortcode('affl_button', 'affl_button_shortcode');
/**
* [affl_criteria id="123"]
* Outputs all criteria and their fields for the current product.
*/
function affl_criteria_shortcode($atts) {
$default_atts = array(
'id' => 0,
);
$atts = shortcode_atts($default_atts, $atts);
$product_data = _affl_get_product_data_for_shortcode($atts, 'affl_criteria');
if (is_string($product_data)) {
return $product_data;
}
$product_id = $product_data['id'];
$all_criterion_values = get_post_meta($product_id, AFFILILABS_META_KEY_PRODUCT_CRITERION_VALUES, true);
if (!is_array($all_criterion_values)) {
$all_criterion_values = [];
}
return AFFLCriteriaService::render_product_criteria_html($all_criterion_values);
}
add_shortcode('affl_criteria', 'affl_criteria_shortcode');