Mostrar WordPress Relacionadas con Puestos con Taxonomía y un tTipo de Mmensaje Personalizado
Spanish (Español) translation by Jean Perez (you can also view the original English article)



A veces desea que los mensajes de tu blog para aparecer en más páginas en su sitio de WordPress a tu blog.
Ya tienes la opción de categoría y archivos de la taxonomía, así como etiquetas. Esto puede ayudar a dividir su contenido y añadir una variedad de secciones en tu sitio blog o noticias.
Pero a veces usted puede tener los mensajes que se refieren a un tipo de mensaje personalizado. Un buen ejemplo de esto es una tienda. Los productos en su tienda son tipos de post personalizados, y para ayudarle a vender esos productos, usted podría escribir artículos sobre ellos.
En este tutorial te mostraré cómo agregar una lista de las mensajes pertinentes a cada página de un tipo de mensaje personalizado en su sitio. Podrá hacerlo utilizando una taxonomía personalizada, cuyos términos se corresponden a los nombres de los productos que desea escribir posts sobre. Te voy a mostrar cómo asignar la taxonomía personalizada a productos y mensajes estándar y utilizar esa relación para generar una lista de mensajes en la página solo para el producto.
Lo Que Necesitará
Para seguir con este tutorial, necesitará:
- Una instalación de desarrollo de WordPress, no añade nada a su sitio hasta que tenga trabajo!
- Un editor de código.
- Un tema que puede editar directamente o con un gancho de acción después del contenido. Si está usando un tema de terceros sin ganchos, usted necesitará crear un tema de niño y editar.
Configurar el Plugin
Comience por crear un nuevo plugin y añadiendo la información del encabezado:
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Tuts+ Add Taxonomy Archive to Custom Post Types
|
4 |
* Plugin URI: https://github.com/rachelmccollin/tutsplus-custom-post-type-taxonomy-archive
|
5 |
* Description: Uses a custom taxonomy to add relevant blog posts to custom post type pages
|
6 |
* Version: 1.0
|
7 |
* Author: Rachel McCollin
|
8 |
* Textdomain: tutsplus
|
9 |
* Author URI: https://rachelmccollin.com
|
10 |
*
|
11 |
*/
|
Si no estás familiarizado con esto, revisa nuestro curso sobre la creación de su primer plugin. Y no dude en modificar el texto del encabezado arriba, sustituyendo su propio nombre, URI, etcetera.
Registrar el Tipo de Post
Si no está trabajando con un tipo de post que es registrado por un plugin existente en su sitio, usted necesitará empezar por registrar uno.
Hacemos esto creando una función y enganchando al gancho de init. En su plugin, añadir esto:
1 |
function tutsplus_register_product_post_type() { |
2 |
|
3 |
// book blurbs
|
4 |
$labels = array( |
5 |
'name' => __( 'Products' ), |
6 |
'singular_name' => __( 'Product' ), |
7 |
'add_new' => __( 'New Product' ), |
8 |
'add_new_item' => __( 'Add New Product' ), |
9 |
'edit_item' => __( 'Edit Product' ), |
10 |
'new_item' => __( 'New Product' ), |
11 |
'view_item' => __( 'View Product' ), |
12 |
'search_items' => __( 'Search Products' ), |
13 |
'not_found' => __( 'No Products Found' ), |
14 |
'not_found_in_trash' => __( 'No Products found in Trash' ), |
15 |
);
|
16 |
$args = array( |
17 |
'labels' => $labels, |
18 |
'has_archive' => true, |
19 |
'public' => true, |
20 |
'hierarchical' => false, |
21 |
'supports' => array( |
22 |
'title', |
23 |
'editor', |
24 |
'excerpt', |
25 |
'custom-fields', |
26 |
'thumbnail', |
27 |
'page-attributes'
|
28 |
),
|
29 |
'rewrite' => array( 'slug' => 'product' ), |
30 |
|
31 |
);
|
32 |
register_post_type( 'tutsplus_product', $args ); |
33 |
|
34 |
}
|
35 |
add_action( 'init', 'tutsplus_register_product_post_type' ); |
Esto registra el plugin tutsplus_product. Si desea que el tipo de post para tener un nombre diferente, edite el código anterior.
Ahora, cuando usted visita las páginas de admin de WordPress, a ver tu post escribe en el menú:



Registro de la Taxonomía
El siguiente paso es registrar la taxonomía. Una vez más, crear otra función en su plugin:
1 |
function tutsplus_register_product_taxonomy() { |
2 |
|
3 |
// product taxonomy
|
4 |
$labels = array( |
5 |
'name' => __( 'Products', 'tutsplus' ), |
6 |
'singular_name' => __( 'Product', 'tutsplus' ), |
7 |
'search_items' => __( 'Search Products', 'tutsplus' ), |
8 |
'all_items' => __( 'All Products', 'tutsplus' ), |
9 |
'edit_item' => __( 'Edit Product', 'tutsplus' ), |
10 |
'update_item' => __( 'Update Product', 'tutsplus' ), |
11 |
'add_new_item' => __( 'Add New Product', 'tutsplus' ), |
12 |
'new_item_name' => __( 'New Product Name', 'tutsplus' ), |
13 |
'menu_name' => __( 'Product Taxonomy Term', 'tutsplus' ), |
14 |
);
|
15 |
|
16 |
$args = array( |
17 |
'labels' => $labels, |
18 |
'hierarchical' => true, |
19 |
'sort' => true, |
20 |
'args' => array( 'orderby' => 'term_order' ), |
21 |
'rewrite' => array( 'slug' => 'book' ), |
22 |
'show_admin_column' => true |
23 |
);
|
24 |
|
25 |
register_taxonomy( 'tutsplus_product_tax', array( 'tutsplus_product', 'post', 'page' ), $args); |
26 |
|
27 |
}
|
28 |
add_action( 'init', 'tutsplus_register_product_taxonomy' ); |
29 |
Mi taxonomía se llama tutsplus_product_tax. Deliberadamente he incluido tax por lo que sé es la taxonomía y no el tipo de post. También hice el menú más específico para que cualquier persona que use este plugin en el administrador de WordPress sepan cuando están trabajando con el tipo de post y cuando trabaja con la taxonomía.
Aquí es en el admin de WordPress:



Se puede ver en la captura de pantalla que también he añadido algunos productos simulados.
Crear la Consulta
Ahora para la diversión parte. Tenemos que escribir una función que buscar los términos de la taxonomía en la nueva taxonomía para un producto y luego de la salida una lista de las mensajes que también tienen ese término.
Para ello, usaremos la función get_the_terms(). Luego crearemos una matriz vacía de variables y agregar las indicaciones de cada uno de los términos a buscar a esa matriz. Luego podemos usar esa matriz en los argumentos de WP_Query.
Empiece por abrir una nueva función y ejecutando una comprobación para ver si estamos en una página de post individual para nuestro tipo de mensaje personalizado. Si te has dado al tipo de mensaje personalizado un nombre diferente, o usas uno registrado por un tema de terceros, deberás sustituir 'tutsplus_product' en el código con su propio tipo de post.
1 |
function tutsplus_add_posts_to_product_pages() {
|
2 |
|
3 |
// check if we're in the product post type |
4 |
if( is_singular( 'tutsplus_product' ) ) {
|
5 |
|
6 |
} |
7 |
|
8 |
} |
Buscar la Lista de Términos y Añadirlos a una Matriz
Dentro de su función (y dentro de la comprobación de estar en una página de producto), ahora necesita obtener una lista de términos de taxonomía para este post.
Añadir esto:
1 |
$productterms = get_the_terms( get_the_ID(), 'tutsplus_product_tax' ); |
Ahora deberás recorrer todos los términos y añadir a una matriz de variables. Pero usted sólo quiere hacer esto si la función anterior devuelve una lista de términos, envolver así que en un cheque $productterms se rellena:
1 |
if( $productterms ) {
|
2 |
|
3 |
$producttermnames[] = 0; |
4 |
|
5 |
foreach( $productterms as $productterm ) {
|
6 |
|
7 |
$producttermnames[] = $productterm->name; |
8 |
|
9 |
} |
10 |
|
11 |
} |
Esto trae las indicaciones de cada término y lo añade a la matriz $producttermnames.
Ejecutar la Consulta
Ahora tenemos que configurar los argumentos de la consulta. Esto será dentro de tu if( $productterms ), ya que no quieres esto para ejecutar si no hay ningún término. Añadir esto a tu código:
1 |
$args = array ( |
2 |
'post_type' => 'post', |
3 |
'tax_query' => array( |
4 |
array( |
5 |
'taxonomy' => 'tutsplus_product_tax', |
6 |
'field' => 'slug', |
7 |
'terms' => $producttermnames, |
8 |
),
|
9 |
),
|
10 |
);
|
Aquí, hemos utilizado la matriz de $producttermnames dentro de los argumentos de tax_query. Esto buscar algun post con alguna de las condiciones que este producto también tiene.
Ahora ejecuta una consulta utilizando esos argumentos:
1 |
if( $query->have_posts() ) { ?> |
2 |
|
3 |
<section class="product-related-posts"> |
4 |
|
5 |
<?php echo '<h2>' . __( 'Related Posts', 'tutsplus' ) . '</h2>'; ?> |
6 |
|
7 |
<ul class="product-posts"> |
8 |
|
9 |
<?php while ( $query->have_posts() ) : $query->the_post(); ?> |
10 |
|
11 |
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> |
12 |
|
13 |
<?php endwhile; ?> |
14 |
|
15 |
<?php wp_reset_postdata(); ?> |
16 |
|
17 |
</ul>
|
18 |
|
19 |
</section>
|
20 |
|
21 |
<?php } |
Esto producirá un elemento h2 con un título y una lista con cada post. Si usted quisiera, podría salida esto diferentemente: tal vez agregando el extracto o la imagen recomendada.
Evitar los Errores
Normalmente, no esperar un usuario para agregar más de un término de taxonomía a cada producto, porque los términos son cada uno relacionado con un producto. Pero es imposible decir con certeza que esto nunca sucedería. Por esta razón la función incluye esa matriz de $producttermslist y utiliza para una instancia de WP_Query, en lugar de ejecutar WP_Query en un bucle foreach. También se hace para una página más eficiente ya que sólo ejecuta una consulta extra.
La Función Completa
Esta es la función en su totalidad, con todas las llaves en el lugar correcto:
1 |
function tutsplus_add_posts_to_product_pages() { |
2 |
|
3 |
// check if we're in the product post type
|
4 |
if( is_singular( 'tutsplus_product' ) ) { |
5 |
|
6 |
// fetch taxonomy terms for current product
|
7 |
$productterms = get_the_terms( get_the_ID(), 'tutsplus_product_tax' ); |
8 |
|
9 |
if( $productterms ) { |
10 |
|
11 |
$producttermnames[] = 0; |
12 |
|
13 |
foreach( $productterms as $productterm ) { |
14 |
|
15 |
$producttermnames[] = $productterm->name; |
16 |
|
17 |
}
|
18 |
|
19 |
|
20 |
// set up the query arguments
|
21 |
$args = array ( |
22 |
'post_type' => 'post', |
23 |
'tax_query' => array( |
24 |
array( |
25 |
'taxonomy' => 'tutsplus_product_tax', |
26 |
'field' => 'slug', |
27 |
'terms' => $producttermnames, |
28 |
),
|
29 |
),
|
30 |
);
|
31 |
|
32 |
// run the query
|
33 |
$query = new WP_Query( $args ); |
34 |
|
35 |
if( $query->have_posts() ) { ?> |
36 |
|
37 |
<section class="product-related-posts"> |
38 |
|
39 |
<?php echo '<h2>' . __( 'Related Posts', 'tutsplus' ) . '</h2>'; ?> |
40 |
|
41 |
<ul class="product-posts"> |
42 |
|
43 |
<?php while ( $query->have_posts() ) : $query->the_post(); ?> |
44 |
|
45 |
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> |
46 |
|
47 |
<?php endwhile; ?> |
48 |
|
49 |
<?php wp_reset_postdata(); ?> |
50 |
|
51 |
</ul>
|
52 |
|
53 |
</section>
|
54 |
|
55 |
<?php } |
56 |
|
57 |
|
58 |
}
|
59 |
|
60 |
}
|
61 |
|
62 |
}
|
Ejecutando la Función
Derecho ahora, esta función no hará nada. Para conseguir que el fuego, usted necesitará hacer una de tres cosas:
- Enganche un gancho de acción existentes en tu tema.
- Añadir un gancho de acción a su tema usando
do_action()y gancho para. - Añadir el nombre de la función al lugar en su tema de donde desea que la lista de salida.
Para las opciones segunda y terceros, si trabaja con un tema de terceros, debe crear un tema de niño y editar. Que podría crear un archivo de plantilla de single-tutsplus_product.php y añadir el gancho o función o simplemente añadirlo a single.php. Si engancha en el archivo de plantilla para el tipo de post, podría eliminar la si if ( is_singular( 'tutsplus_product' ) ).
En mi caso, estoy usando el tema de Suki desde el directorio de plugin de WordPress. Incluye gancho en el archivo single.php:
1 |
do_action( 'suki/frontend/after_main' ); |
El gancho es justo debajo del contenido, exactamente donde quiere mi lista para ser salida. Así que me lo enganche mi función en ese gancho de acción:
1 |
add_action( 'suki/frontend/after_main', 'tutsplus_add_posts_to_product_pages' ); |
Una vez que hayas hecho esto, guarde tu plugin y añadir algunos productos y términos de la taxonomía.
El Resultado
He añadido el término widget a mi producto de Widget, pero también he añadido otro término para demostrar esto:



He añadido estos dos términos a un número de puestos en mi sitio, y al ver la página del producto para un Widget, puede ver la lista de entradas relacionadas debajo, de ambos términos:



Esta lista de mensajes le ayudará a los visitantes acceder a entradas del blog relacionadas con ese producto y se les anima a saber más sobre él y (esperemos) a comprar.



