Skip to content

Instantly share code, notes, and snippets.

@molavec
Last active August 5, 2026 15:54
Show Gist options
  • Select an option

  • Save molavec/f568f9cb7d1a4329229e6289db644470 to your computer and use it in GitHub Desktop.

Select an option

Save molavec/f568f9cb7d1a4329229e6289db644470 to your computer and use it in GitHub Desktop.
Woocommerce: Create Shortcodes for product page relevante blocks

Shortcodes for Woocommerce in product pages

Useful Wordpress shortcodes for Woocommerce Product Page

Some shortcodes listed here are:

  • woo-product-attributes-shortcode.php: Creates a shortcode to display WooCommerce attributes
  • woo-product-long-description.php: Creates a shortcode to display the WooCommerce long description
  • woo-product-reviews.php: Creates a shortcode to display WooCommerce reviews

Feel free to add some others.

<?php
/**
* Creates a shortcode to display WooCommerce attributes
* Basic usage: [product_attributes]
* Usage with specific ID: [product_attributes id="123"]
*/
add_shortcode( 'product_attributes', 'custom_woo_attributes_shortcode' );
function custom_woo_attributes_shortcode( $atts ) {
global $product;
// Permitir pasar un ID específico por el shortcode, por defecto usa el actual
$atts = shortcode_atts( array(
'id' => ''
), $atts, 'product_attributes' );
// Definir qué producto usar
if ( ! empty( $atts['id'] ) ) {
$product_obj = wc_get_product( $atts['id'] );
} else {
$product_obj = $product;
}
// Validar que realmente estamos ante un objeto de producto válido
if ( ! is_a( $product_obj, 'WC_Product' ) ) {
return '';
}
// Activar el búfer de salida (Output Buffering)
ob_start();
// Llamar a la función nativa de WooCommerce para los atributos
wc_display_product_attributes( $product_obj );
// Capturar y retornar el HTML en lugar de imprimirlo directamente
return ob_get_clean();
}
<?php
/**
* Creates a shortcode to display the WooCommerce long description
* Basic usage: [product_description]
* Usage with specific ID: [product_description id="123"]
*/
add_shortcode( 'product_description', 'custom_woo_long_description_shortcode' );
function custom_woo_long_description_shortcode( $atts ) {
global $product;
$atts = shortcode_atts( array(
'id' => ''
), $atts, 'product_description' );
if ( ! empty( $atts['id'] ) ) {
$product_obj = wc_get_product( $atts['id'] );
} else {
$product_obj = $product;
}
if ( ! is_a( $product_obj, 'WC_Product' ) ) {
return '';
}
// Obtener la descripción larga del objeto del producto
$description = $product_obj->get_description();
// Si no hay descripción, no retornamos nada
if ( empty( $description ) ) {
return '';
}
// APLICAR FILTROS: Esto es crucial para mantener el formato (párrafos, negritas, embeds)
return apply_filters( 'the_content', $description );
}
<?php
/**
* Creates a shortcode to display WooCommerce reviews
* Basic usage: [product_reviews]
* Usage with specific ID: [product_reviews id="123"]
*/
add_shortcode( 'product_reviews', 'custom_woo_reviews_shortcode' );
function custom_woo_reviews_shortcode( $atts ) {
global $product, $post;
$atts = shortcode_atts( array(
'id' => ''
), $atts, 'product_reviews' );
// Determinar el ID del producto (el proporcionado o el actual)
$product_id = ! empty( $atts['id'] ) ? intval( $atts['id'] ) : ( is_object( $product ) ? $product->get_id() : ( is_object( $post ) ? $post->ID : 0 ) );
if ( empty( $product_id ) ) {
return '';
}
// Respaldar el post original de la página actual para no romper nada
$original_post = $post;
// Si pasaste un ID por shortcode, configuramos el entorno para ese producto
if ( ! empty( $atts['id'] ) ) {
$post = get_post( $product_id );
setup_postdata( $post );
}
// Verificación de seguridad: si no es un producto, abortamos misión
if ( get_post_type( $post ) !== 'product' ) {
if ( ! empty( $atts['id'] ) ) {
$post = $original_post;
setup_postdata( $post );
}
return '';
}
// Activar el búfer de salida (Output Buffering)
ob_start();
// Cargar la plantilla. WooCommerce intercepta esto automáticamente
// y carga 'single-product-reviews.php' en lugar de los comentarios normales.
comments_template();
// Capturar el HTML generado
$output = ob_get_clean();
// ¡Muy importante! Restaurar el post original para que el resto de tu página siga funcionando perfecto
if ( ! empty( $atts['id'] ) ) {
$post = $original_post;
setup_postdata( $post );
} else {
// Por si acaso estamos en el loop actual, reseteamos
wp_reset_postdata();
}
return $output;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment