• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

Must Comunicación

Diseño Web y Marketing Online

  • Temas WordPress
  • Plugins WordPress
  • WooCommerce
  • Marketing
  • Tutoriales
    • WooCommerce
    • Easy Digital Downloads
  • Contacto
Usted está aquí: Inicio / WordPress / Desarrollo Web / Crear un listado de productos con infinitas categorías utilizando tipos de entradas personalizadas

Crear un listado de productos con infinitas categorías utilizando tipos de entradas personalizadas

Tutoriales WooCommerce
    Anterior: Las 20 mejores aplicaciones y software de mensajería de texto SMS para empresas
    Siguiente: Mejores plugins gratuitos de WordPress para galerías

Desarrollo Web Tutorial de WooCommerce WooCommerce WordPress Deja un comentario

Compartir
Compartir
Twittear
Pocket
WhatsApp
Email

En el tutorial de hoy vamos a aprovechar el poder de los tipos de entradas personalizadas, las taxonomías y los bucles o «loops» personalizados para crear un listado dinámico de productos. Hay muchas cosas que ver, ¡así que vamos directamente a ello!

Paso 1 Crear un tipo de entrada personalizada de productos

En primer lugar, necesitamos crear nuestro tipo de entrada personalizada para los productos. Abre tu archivo functions.php y añade la siguiente línea en la parte superior después de la etiqueta PHP de apertura:

Crear tipo de entrada personalizada en WordPress para los productos de WooCommerce
PHP
1
require_once ('functions/products.php');

Si aún no tienes uno, crea un directorio llamado functions dentro de tu carpeta de temas y un archivo llamado products.php dentro de dicho directorio. En nuestro archivo products.php, registraremos nuestro tipo de entrada personalizada:

Registrar un tipo de entrada personalizada para productos de WooCommerce en WordPress
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
add_action( 'init', 'product_register' );
function product_register() {
  $labels = array(
    'name' => _x('Products', 'post type general name'),
    'singular_name' => _x('Product', 'post type singular name'),
    'add_new' => _x('Add New', 'Product'),
    'add_new_item' => __('Add New Product'),
    'edit_item' => __('Edit Product'),
    'new_item' => __('New Product'),
    'all_items' => __('All Products'),
    'view_item' => __('View Products'),
    'search_items' => __('Search Products'),
    'not_found' =>  __('No products found'),
    'not_found_in_trash' => __('No products found in Trash'),
    'parent_item_colon' => '',
    'menu_name' => 'Products'
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' )
  );
  register_post_type('products',$args);
}

La primera línea es un gancho que llamará a nuestra función ‘products_register’ cuando se inicializa el administrador de WP. Dentro de nuestra función configuramos dos matrices. La primera son las etiquetas que se utilizarán en nuestro escritorio de WordPress. Dentro de nuestra función creamos un listado de argumentos la mayoría de los cuales se explican por sí mismos. Nuestro último argumento ‘supports’ nos permite especificar lo que queremos mostrar en la página de escritura/edición de la entrada. Ten en cuenta que hemos añadido compatibilidad con los atributos de página para especificar el orden de nuestros productos dentro de una categoría (imagen del escritorio). A continuación, pasamos en la función register_post_type el nombre de nuestro tipo de entrada personalizada y los argumentos.

Order Panel

Vamos a añadir un campo personalizado para almacenar el precio de nuestros productos.

Crear campo personalizado para almacenar el precio de un producto en WooCommerce
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
add_action("admin_init", "price_meta");
function price_meta(){
  add_meta_box("price", "Price", "Price", "products", "normal", "low");
}
function price(){
  global $post;
  $custom = get_post_custom($post->ID);
  $price = $custom["price"][0];
  ?>
  <label>Price:</label>
  <input id="price" name="price" type="text"  value="<?php echo $price; ?>" />
  <?php
}
  
add_action('save_post', 'save_meta');
function save_meta(){
  global $post;
  update_post_meta($post->ID, price, $_POST["price"]);
}
?>

Una vez más, cuando se inicializa el administrador de WP, nuestra función price_meta es invocada y mostrará nuestro campo personalizado. A continuación, creamos una función llamada price que creará el campo de formulario para nuestro tipo de entrada personalizada. También hemos capturado su valor actual usando get_post_custom para que podamos mostrarlo cuando estemos editando una entrada si se ha establecido un valor. Nuestra última función guarda el valor asignado a nuestro campo personalizado utilizando update_post_meta(). Pasamos a la función el ID de nuestra entrada, el nombre del campo que está siendo actualizado y el valor que estamos almacenando.

Paso 2 Crear una taxonomía de categoría de productos

Queremos poder organizar nuestros productos en categorías, así que vamos a crear una taxonomía personalizada llamada Product Categories para poder hacer exactamente eso.

Crear taxonomía personalizada para los productos de WooCommerce
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$labels = array(
    'name' => _x( 'Product Categories', 'taxonomy general name' ),
    'singular_name' => _x( 'Product Category', 'taxonomy singular name' ),
    'search_items' =>  __( 'Search Product Categories' ),
    'all_items' => __( 'All Product Categories' ),
    'parent_item' => __( 'Parent Category' ),
    'parent_item_colon' => __( 'Parent Category:' ),
    'edit_item' => __( 'Edit Product Category' ),
    'update_item' => __( 'Update Product Category' ),
    'add_new_item' => __( 'Add Product Category' ),
    'new_item_name' => __( 'New Product Category' ),
    'menu_name' => __( 'Product Categories' )
  );    
register_taxonomy('product_categories',array('products'), array(
    'hierarchical' => true,
    'labels' => $labels,
    'query_var' => true,
    'show_ui' => true
));

Una vez más, definimos nuestras etiquetas. A continuación, invocamos la función register_taxonomy. Le indicamos a la función el nombre de nuestra taxonomía, es decir, product_categories (ten en cuenta la falta de espacios y las letras mayúsculas), los tipos de entrada(s) a asociar a la taxonomía y le pasamos un puñado de argumentos. Es importante destacar que establecemos hierarchical en true para admitir taxonomías anidadas o en nuestro caso, subcategorías de producto.

Paso 3 Tratar con imágenes

Nuestros productos harán uso de imágenes destacadas, por lo que necesitamos asegurarnos de que nuestro tema las admita. Comprueba el archivo functions.php de tu tema y fíjate si ya es compatible con las miniaturas de entrada, si no añade esta línea en la parte superior del archivo, justo bajo donde hemos añadido nuestro tipo de entrada personalizada.

Añadir soporte a las imágenes destacadas a un tema de WordPress
PHP
1
2
3
if ( function_exists( 'add_theme_support' ) ) {  
add_theme_support( 'post-thumbnails' );  
}

Nos gustaría asignar una imagen a cada una de nuestras categorías de productos. Por ahora no hay una forma integrada de hacer esto, así que tendremos que instalar el fantástico plugin Taxonomy Images de Michael Fields. Una vez que tengamos el plugin instalado y activado navegamos a su página de configuración y le indicamos que añada soporte de imagen a nuestra taxonomía de categorías de productos.

Taxonomy Images Plugin Settings Page

A continuación vamos a añadir soporte para el cambio dinámico de tamaño de imágenes para nuestra categoría de productos e imágenes de productos usando Timthumb, un script de cambio de tamaño de imagen PHP. Es un placer trabajar con Timbhumb y una brisa a implementar en los temas de WordPress. Pronto nos meteremos a fondo en su uso en los archivos de nuestros temas, pero por ahora vamos a configurarlo. Vamos a descargar Timthumb y a colocar el script en los archivos de nuestro tema. También necesitaremos crear un directorio de caché en el directorio de nuestro tema y asignarle un nivel de permisos 777.

Paso 4 Listar nuestras categorías de producto de nivel superior

Para enumerar nuestras categorías de producto de nivel superior vamos a crear una plantilla de página personalizada que llamaremos Products.

Crear una plantilla de página personalizada para enumerar categorías de producto de nivel superior
PHP
1
2
3
4
5
6
<?php
/**
Template Name: Products
*/
get_header(); ?>

A continuación vamos a crear una consulta para nuestras categorías de nivel superior.

Query para consultar las categorías de nivel superior de una taxonomía de productos
PHP
1
2
3
4
$args=array(
    'hide_empty'        => 0,
    'parent'        => 0,
    'taxonomy'      => 'product_categories');

Aquí hemos configurado tres argumentos que pasaremos a la función get_categories. Cada argumento es esencial para recuperar las categorías de producto de nivel superior

  • Hide_empty => 0 Permite mostrar categorías que no contienen ninguna entrada
  • Parent => 0 Al definir un elemento primario hemos limitado las taxonomías devueltas a solo taxonomías que tienen un elemento primario con un ID de 0. Al establecer el ID principal en 0 significa que devolveremos taxonomías de nivel superior dado que no tienen ninguna categoría padre
  • Taxonomy => ‘product_categories’ aquí estamos definiendo la taxonomía a consultar, por defecto esta está establecida en «category» por lo que tenemos que indicarle a WordPress que en su lugar queremos consultar nuestra taxonomía personalizada

A continuación, pasamos los argumentos a get_categories que devuelve una matriz de taxonomías coincidentes. Comenzamos un bucle foreach y establecemos un par de variables.

La primera es la imagen de la categoría de producto que hemos recuperado mediante get_option y pasándole el nombre de la opción que queremos recuperar. En este caso es la imagen establecida por el plugin de imágenes de taxonomía. La siguiente variable es la dirección URL del archivo de la taxonomía. Para lograr esto hemos utilizado la función get_term_link pasándole el slug y el nombre de la taxonomía. A continuación, comenzamos a generar las categorías de productos coincidentes.

Bucle para mostrar determinadas categorías de producto de WooCommerce
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$categories=get_categories($args);
        
foreach($categories as $category) {
    echo '<div class="product-cat">';
    $thumb_url = get_option('taxonomy_image_plugin');
    $product_cat_url = get_term_link( $category->slug, 'product_categories' );
                
    echo '<a href="'.$product_cat_url.'"><img src="'.get_template_directory_uri().'/timthumb.php?src='.wp_get_attachment_url( $thumb_url[$category->term_taxonomy_id]).'&h=200&w=200" /></a>';
    echo '<a class="cat-title" href="' . $product_cat_url .'">' . $category->name.'</a>';
    echo '</div> <!--end product cat-->';
}

Echemos un vistazo a cómo se generan las miniaturas usando Timthumb. Necesitamos establecer la fuente en la ruta de nuestra copia del script que hemos ubicado en el directorio de nuestro tema. A continuación, tenemos que proporcionarle al script la fuente de la imagen y establecer su anchura y altura. Es simple, ¿no? También he configurado una instrucción if para asegurarme de que tenemos una alternativa por si una categoría no tiene una imagen asociada.

Lo que te queda por leer:

  • Paso 5 Listar subcategorías y productos
  • Paso 6 Visualizar un producto individual
Seguir leyendo en Tuts+

Entradas relacionadas

Compartir
Compartir
Twittear
Pocket
WhatsApp
Email

categorías: Desarrollo Web, Tutorial de WooCommerce, WooCommerce, WordPress

anterior
siguiente

Acerca de Eva Collados Pascual

Apasionada de la sociedad de la información, el marketing online, la tecnología, el diseño y el arte.
Sigo a diario todas las noticias relacionadas con WordPress, si no encuentras en el blog la solución que buscabas, no dudes en consultarme.

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la Política de privacidad

Barra lateral principal

Categorías

  • Apps – Productividad
  • Artículos Tuts+
  • Diseño Web
  • eCommerce
  • Email Marketing
  • Emprendimiento
  • Marketing
  • SEO
  • Temas Shopify
  • Temas WordPress
  • Tutoriales
    • Tutorial de Easy Digital Downloads
    • Tutorial de WooCommerce
    • Tutorial W3 Total Cache
  • WooCommerce
  • WordPress
    • Desarrollo Web
    • Optimización
    • Plugins
    • Seguridad
    • Temas WordPress

Etiquetas

caché Conversión CRO Inspiración Web Landing Pages newsletters Performance Optimization PHP Plugins WooCommerce Plugins WordPress Seguridad SEO Startups Temas WooCommerce Temas WordPress Tutoriales Tuts+ Vídeo WooCommerce WordPress WPO

Copyright Must Comunicación© 2025 Genesis Framework

Este sitio web usa cookies propias y de terceros para recordar tus datos de inicio de sesión y recopilar estadísticas para mejorar la experiencia del usuario. Más información sobre las cookies Leer más. Aceptar x
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR