#php #woocommerce
#php #woocommerce
Вопрос:
Я хочу создать пару уникальных классов, таких как class1, class2 до 6 или 7, добавленных к 6 или 7 продуктам в цикле магазина. Я хотел бы удвоить эти 6/7 продуктов с уникальным классом, чтобы на странице в каталоге магазина было 12/14 продуктов.
Я попытался отредактировать content-product.php файл и archive-page.php .
Я добавил этот код в файл содержимого продукта:
<?php
$x = 1;
?>
<li class="columns class<?php echo esc_attr($x ); ?>">
Но это не добавляет никакого дополнительного номера к другому продукту.
Это добавляет 1 только в том случае, если внутри этого li есть другой класс div с этим php-кодом:
<?php echo esc_attr($x ); ?>">
добавлено в класс, но это не относится к другому li со следующим продуктом.
Есть идеи, как этого добиться?
Комментарии:
1.
$x = 1;
необходимо находиться вне цикла product сразу после<ul>
тега и перед циклом product…2. К сожалению, это не работает. Я добавил, как вы сказали, этот код сразу после <ul> в loop/loop-start.php . Сдается только в случае, если $Х=1 находится в том же файле, как <?php echo esc_attr($x ); ?>»>. Может быть, есть какой-то способ с помощью js добавить к этим классам?
Ответ №1:
Хорошо, я нашел решение.
<?php
$x = 1;
?>
<li class="columns class<?php echo esc_attr($x ); ?>">
этот код работает только в одном файле php, поэтому мне нужно было сохранить все в одном файле php,
точно в archive-product.php
Вместо сохранения этой ссылки на другой файл php
<?php wc_get_template_part( 'content', 'product' ); ?>
Я взял весь контент из продукта content и добавил его в archive-product.php
таким образом, код $ x может работать.
Вот как код archive-product.php похоже, и это работает отлично:
defined( 'ABSPATH' ) || exit;
get_header( 'shop' );
do_action( 'woocommerce_before_main_content' );
?>
<header class="woocommerce-products-header">
<?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
<h1 class="woocommerce-products-header__title page-title"><?php
woocommerce_page_title(); ?></h1>
<?php endif; ?>
<?php
/**
* Hook: woocommerce_archive_description.
*
* @hooked woocommerce_taxonomy_archive_description - 10
* @hooked woocommerce_product_archive_description - 10
*/
do_action( 'woocommerce_archive_description' );
?>
</header>
<?php
if ( woocommerce_product_loop() ) {
/**
* Hook: woocommerce_before_shop_loop.
*
* @hooked woocommerce_output_all_notices - 10
* @hooked woocommerce_result_count - 20
* @hooked woocommerce_catalog_ordering - 30
*/
do_action( 'woocommerce_before_shop_loop' );
}
?>
<div class="products">
<?php
$one = 1;
$args = array(
'post_type' => 'product',
'posts_per_page' => 12
);
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
?>
<div class="columns product<?php echo esc_attr($one ); ?>">
<div class="column is-one-third">
<?php
defined( 'ABSPATH' ) || exit;
global $product;
// Ensure visibility.
if ( empty( $product ) || ! $product->is_visible() ) {
return;
}
/**
* Hook: woocommerce_before_shop_loop_item.
*
* @hooked woocommerce_template_loop_product_link_open - 10
*/
do_action( 'woocommerce_before_shop_loop_item' );
/**
* Hook: woocommerce_before_shop_loop_item_title.
*
* @hooked woocommerce_show_product_loop_sale_flash - 10
* @hooked woocommerce_template_loop_product_thumbnail - 10
*/
do_action( 'woocommerce_before_shop_loop_item_title' );
/**
*
* close link
*/
do_action( 'woocommerce_shop_loop_close_link' );
?>
</div>
<div class="column">
<?php
/**
* Hook: woocommerce_before_shop_loop_item.
*
* @hooked woocommerce_template_loop_product_link_open - 10
*/
do_action( 'woocommerce_before_shop_loop_item' );
/**
* Hook: woocommerce_shop_loop_item_title.
*
* @hooked woocommerce_template_loop_product_title - 10
*/
do_action( 'woocommerce_shop_loop_item_title' );
/**
* Hook: woocommerce_after_shop_loop_item_title.
*
* @hooked woocommerce_template_loop_rating - 5
* @hooked woocommerce_template_loop_price - 10
*/
do_action( 'woocommerce_after_shop_loop_item_title' );
/**
* Hook: woocommerce_after_shop_loop_item.
*
* @hooked add to cart
*/
do_action( 'woocommerce_after_shop_loop_item' );
/**
*
* close link
*/
do_action( 'woocommerce_shop_loop_close_link' );
?>
</div>
</div>
<?php
endwhile;
} else {
echo __( 'Nie znaleziono produktów' );
}
wp_reset_postdata();
?>
</div><!--/.products-->
<?php
do_action( 'woocommerce_after_shop_loop' );
get_footer( 'shop' );
Комментарии:
1. Это на самом деле не работает, это не позволяет выбрать: заказать по параметрам, например. Итак, я публикую окончательное решение в другом ответе
Ответ №2:
На самом деле мой окончательный awnser немного отличается. Предыдущий не работал с select / options для order by и, вероятно, для чего-то большего. Правильное решение для archive-page.php это:
defined( 'ABSPATH' ) || exit;
get_header( 'shop' );
/**
* Hook: woocommerce_before_main_content.
*
* @hooked woocommerce_output_content_wrapper - 10 (outputs opening
divs for the content)
* @hooked woocommerce_breadcrumb - 20
* @hooked WC_Structured_Data::generate_website_data() - 30
*/
do_action( 'woocommerce_before_main_content' );
?>
<header class="woocommerce-products-header">
<?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
<h1 class="woocommerce-products-header__title page-title"><?php woocommerce_page_title(); ?></h1>
<?php endif; ?>
<?php
/**
* Hook: woocommerce_archive_description.
*
* @hooked woocommerce_taxonomy_archive_description - 10
* @hooked woocommerce_product_archive_description - 10
*/
do_action( 'woocommerce_archive_description' );
?>
</header>
<?php
woocommerce_product_loop_start();
$one = 1;
if ( wc_get_loop_prop( 'total' ) ) {
while ( have_posts() ) {
the_post();
?>
<div class="columns product<?php echo esc_attr($one ); ?>">
<?php
/**
* Hook: woocommerce_shop_loop.
*
* @hooked WC_Structured_Data::generate_product_data() - 10
*/
do_action( 'woocommerce_shop_loop' );
wc_get_template_part( 'content', 'product' );
}
}
woocommerce_product_loop_end();
?>
</div>
<?php
/**
* Hook: woocommerce_after_shop_loop.
*
* @hooked woocommerce_pagination - 10
*/
do_action( 'woocommerce_after_shop_loop' );
} else {
/**
* Hook: woocommerce_no_products_found.
*
* @hooked wc_no_products_found - 10
*/
do_action( 'woocommerce_no_products_found' );
}
/**
* Hook: woocommerce_after_main_content.
*
* @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the
content)
*/
do_action( 'woocommerce_after_main_content' );
/**
* Hook: woocommerce_sidebar.
*
* @hooked woocommerce_get_sidebar - 10
*/
do_action( 'woocommerce_sidebar' );
get_footer( 'shop' );