jason es mi nombre
Tengo dificultades para crear mi propio ciclo de productos de WooCommerce personalizado.
En el camino me he encontrado con algunas preguntas que serían realmente útiles si pudieran ser respondidas.
Actualmente estoy trabajando con este bloque de código:
ARCHIVO-PRODUCTO.PHP (Movido al tema secundario -> woocommerce/archive-product.php):
<?php
/**
* @see https://docs.woocommerce.com/document/template-structure/
* @package WooCommerce/Templates
* @version 3.4.0
*/
defined( 'ABSPATH' ) || exit;
get_header();
$display_count = $atts['per_page'];
echo $display_count; // NO value - How do I access this?
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo $page; // returns 1 - CORRECT;
$offset = ( $page - 1 ) * $display_count;
echo $offset; // returns 0 - CORRECT;
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => $atts['per_page'],
'page' => $page,
'offset' => $offset,
'orderby' => $atts['orderby'],
'order' => $atts['order']
); ?>
<?php
$loop = new WC_Product_Query( $args );
if ( $loop->have_posts() ) :
// do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
?>
<div id="product-list">
<?php
while ( $loop->have_posts() ) :
$loop->the_post();
wc_get_template_part( 'content', 'product' );
endwhile;
?>
</div>
<?php
woocommerce_product_loop_end();
do_action( 'woocommerce_after_shop_loop' );
else :
do_action( 'woocommerce_no_products_found' );
endif;
wp_reset_postdata();
do_action( 'woocommerce_after_main_content' );
do_action( 'woocommerce_sidebar' );
get_footer(); ?>
Quizá mi error salte a la vista de inmediato.
A medida que analice mi código, resaltaré las preguntas con las que me he encontrado y para las que no puedo encontrar respuestas.
Comenzando con la línea:
$display_count = $atts['per_page'];
echo $display_count; // NO value - How do I access this?
Tenía entendido que estas variables ($atts['per_page']
, $atts['order_by']
, $atts['order']
) se incluyeron aquí: /includes/class-wc-shortcodes.php
.
Sin embargo, solo puedo ver este atributo configurado para páginas de productos individuales a menos que me equivoque.
¿Puedo usar las variables configuradas dentro de $atts?[]? Esto también se aplica a los usos de estas variables más abajo en la página en la matriz $args
¿Cómo los configuro para poder usarlos?
¿Dónde se almacenan y modifican estos valores?
Al escribir un script de paginación AJAX personalizado en el archivo functions.php, ¿estas variables también están disponibles aquí? Si no, ¿cómo puedo configurarlos?
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo $page; // returns 1 - CORRECT;
Configurar una variable de página para ayudarme a realizar un seguimiento de la página en la que estoy.
$offset = ( $page - 1 ) * $display_count;
echo $offset; // returns 0 - CORRECT;
Crear la variable de compensación para poner en los argumentos para que se pueda decir cuántos productos se compensarán, será muy útil en la paginación.
$loop = new WC_Product_Query( $args );
Creación del bucle de productos asociados con los $args proporcionados.
¿Es este el mejor controlador de consultas para usar? He visto muchos otros como:
$loop = new WP_Query( $args );
$loop = wc_get_products( $args );
Al final del código, solo estoy tratando de generar los productos encontrados usando la mayor cantidad posible de estructuración de la plantilla base de WooCommerce.
EDITAR: Idealmente, también me mostraría cómo hacer uso del bucle de WooCommerce, ya que he usado un complemento para el complemento de WooCommerce que me ayuda a reordenar los productos en un pedido personalizado. Es esta lista de productos ordenados a la medida la que deseo revisar.
Consulta básica para recorrer los productos de WooCommerce
<ul class="products">
<?php
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1, // -1 will get all the product. Specify positive integer value to get the number given number of product
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) : $the_query->the_post();
// Get default product template
wc_get_template_part( 'content', 'product' );
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
?>
</ul>
-
No estoy buscando una respuesta básica aquí amigo. Idealmente, también me mostraría cómo hacer uso del bucle de WooCommerce, ya que he usado un complemento para el complemento de WooCommerce que me ayuda a reordenar los productos en un pedido personalizado. Es esta lista de productos ordenados a la medida la que deseo revisar.
– Jason es mi nombre
29 de enero de 2020 a las 9:03
La publicación tiene múltiples preguntas, se parece más a un blog. ¿Obtuviste tus respuestas? ¿Te importaría compartirlos con la comunidad?
– Lenin
28 de septiembre de 2021 a las 1:23