مشکل محصولات مرتبط ووکامرس

سلام و عرض خسته نباشید

من همچین مشکلی دارم
میخوام محصولات مرتبط از زیرگروه همون محصول باشه مثلا ==> خانه / کالای دیجیتال / کامپیوتر و تجهیزات جانبی / تجهیزات مخصوص بازی / دسته بازی

میخوام محصول قرار گرفته در دسته ی ( دسته بازی ) محصولات پیشنهادیشم از همین گروه باشه که زیرش فقط دسته بازی نمایش بده

اینم آدرس سایت ===> [https://bazarche.xyz/product/خرید-دسته-بازی-ونوس-مدل-pv-g212/](https://bazarche.xyz/product/%d8%ae%d8%b1%db%8c%d8%af-%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d8%a7%d8%b2%db%8c-%d9%88%d9%86%d9%88%d8%b3-%d9%85%d8%af%d9%84-pv-g212/)

سلام دوست عزیز،

2 راهکار دارید:

از این پلاگین استفاده کنید که به شما اجازه میده برای هر محصول محصولات مرتبط مشخصی اضافه کنید:

یا این کد رو به functions.php قالب فعالتون اضافه کنید و تست کنید:

// Get Related Products from SAME Sub-category
add_filter( 'woocommerce_product_related_posts', 'my_custom_related_products' );
function custom_related_products($product){
    global $woocommerce;
    // Related products are found from category and tag
    $tags_array = array(0);
    $cats_array = array(0);
    // Get tags
    $terms = wp_get_post_terms($product->id, 'product_tag');
    foreach ( $terms as $term ) $tags_array[] = $term->term_id;
    // Get categories
    $terms = wp_get_post_terms($product->id, 'product_cat');
    foreach ( $terms as $key => $term ){
        $check_for_children = get_categories(array('parent' => $term->term_id, 'taxonomy' => 'product_cat'));
        if(empty($check_for_children)){
            $cats_array[] = $term->term_id;
        }
    }
    // Don't bother if none are set
    if ( sizeof($cats_array)==1 && sizeof($tags_array)==1 ) return array();
    // Meta query
    $meta_query = array();
    $meta_query[] = $woocommerce->query->visibility_meta_query();
    $meta_query[] = $woocommerce->query->stock_status_meta_query();
    $meta_query   = array_filter( $meta_query );
    // Get the posts
    $related_posts = get_posts( array(
            'orderby'        => 'rand',
            'posts_per_page' => $limit,
            'post_type'      => 'product',
            'fields'         => 'ids',
            'meta_query'     => $meta_query,
            'tax_query'      => array(
                'relation'      => 'OR',
                array(
                    'taxonomy'     => 'product_cat',
                    'field'        => 'id',
                    'terms'        => $cats_array
                ),
                array(
                    'taxonomy'     => 'product_tag',
                    'field'        => 'id',
                    'terms'        => $tags_array
                )
            )
        ) );
    $related_posts = array_diff( $related_posts, array( $product->id ), $product->get_upsells() );
    return $related_posts;
}
3 پسندیده

خیلی لطف کردین ولی متاسفانه عمل نکرد ، فکر میکنم طراح قالب اختصاصی زده این حلقرو :worried:

این هم اضافه کنم که من سایتم روی سرور خودتون هست اگر میخواین دسترسی البته

:frowning:

فکر کنم راه حلی نداره همه میان نگاهی میندازن میرن

سلام

ببینید کلیه پلاگین های مرتبط با خواسته شما اینهاست:

نکته مهم در کانفیگه اینهاست.
به اسکرین شات این پلاگین ها دقت کنید، در صفحه ویرایش محصول بایستی دسته بندی مورد نظرتون رو انتخاب کنید.

4 پسندیده

بزرگوار من قالب سنگینی دارم و افزونه خیلی روش نصب هست

میخواستم تا جایی ممکنه از ی کد یا ی دستکاری در کدهای قالب بتونم حلش کنم ، نمیشه ؟:frowning:

1 پسندیده

سلام

به این مسیر از قالبتون برید: your-theme/woocommerce/single-product/related.php و با حفظ بک آپ از این فایل، محتویات اونرو به مقدار زیر تغییر بدید و بررسی کنید:

<?php
/**
 * Related Products
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see         https://docs.woocommerce.com/document/template-structure/
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     3.9.0
 */

if ( ! defined( 'ABSPATH' ) ) {
  exit;
}

global $product, $woocommerce_loop;

if ( empty( $product ) || ! $product->exists() ) {
  return;
}

if ( ! $related = $product->get_related( $posts_per_page ) ) {
  return;
}

// Get ID of current product, to exclude it from the related products query
$current_product_id = $product->get_id();

$cats_array = array(0);

// get categories
$terms = wp_get_post_terms( $product->id, 'product_cat' );

// select only the category which doesn't have any children
foreach ( $terms as $term ) {
  $children = get_term_children( $term->term_id, 'product_cat' );
  if ( !sizeof( $children ) )
  $cats_array[] = $term->term_id;
}

$args = apply_filters( 'woocommerce_related_products_args', array(
  'post_type' => 'product',
  'post__not_in' => array( $current_product_id ),   // exclude current product
  'ignore_sticky_posts' => 1,
  'no_found_rows' => 1,
  'posts_per_page' => $posts_per_page,
  'orderby' => $orderby,
  'tax_query' => array(
    array(
        'taxonomy' => 'product_cat',
        'field' => 'id',
        'terms' => $cats_array
    ),
  )
));

$products                    = new WP_Query( $args );
$woocommerce_loop['name']    = 'related';
$woocommerce_loop['columns'] = apply_filters( 'woocommerce_related_products_columns', $columns );

if ( $products->have_posts() ) : ?>

  <section class="related products">

    <?php
    $heading = apply_filters( 'woocommerce_product_related_products_heading', __( 'Related products', 'woocommerce' ) );

    if ( $heading ) :
    ?>
      <h2><?php echo esc_html( $heading ); ?></h2>
    <?php endif; ?>

    <?php woocommerce_product_loop_start(); ?>

      <?php while ( $products->have_posts() ) : $products->the_post(); ?>

        <?php wc_get_template_part( 'content', 'product' ); ?>

      <?php endwhile; // end of the loop. ?>

    <?php woocommerce_product_loop_end(); ?>

  </section>

<?php endif;

wp_reset_postdata();
5 پسندیده

پلاگینهای ارسالی پلاگین های سبکی هستند.
اگر کد برای شما کار نکرد، در ابتدا این پلاگین رو تست کنید:

این پلاگین 10.000 نصب و امتیاز بالایی داره، و فایل زیپش کلا 55KB حجم داره.
نگران نباشید.

3 پسندیده

خیلی خیلی ممنون
درست شد ولی نحوه ی نمایش مشکل داره و ریخت بهم :

~لینک هارو داخل متن قالب بندی شده کد قرار بدید لطفا - با تشکر ANGEL~

[https://bazarche.xyz/product/خرید-دسته-بازی-ونوس-مدل-pv-g222-دوتایی/](https://bazarche.xyz/product/%d8%ae%d8%b1%db%8c%d8%af-%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d8%a7%d8%b2%db%8c-%d9%88%d9%86%d9%88%d8%b3-%d9%85%d8%af%d9%84-pv-g222-%d8%af%d9%88%d8%aa%d8%a7%db%8c%db%8c/)

یات یکی از محصولات موبایل ببینین متوجه منظورم میشین

https://bazarche.xyz/product/%d8%ae%d8%b1%db%8c%d8%af-%da%af%d9%88%d8%b4%db%8c-%d9%85%d9%88%d8%a8%d8%a7%db%8c%d9%84-%d9%87%d9%88%d8%a2%d9%88%db%8c-%d9%85%d8%af%d9%84-y9-prime-2019-stk-l21-%d8%af%d9%88-%d8%b3%db%8c%d9%85-%da%a9/

اینجا بهتر مشخص هست

سلام خدمت شما
کد هایی که جناب مهندس رحیم جان @Rahim ارسال کردند درست هستند و فرم ابتدایی حالت نمایش محصولات مرتبط را نمایش میدهد
در ورژن اولیه قالب محصولات مرتبط بصورت اسلایدر میباشند
لذا برای هماهنگی کد ها باید شما your-theme/woocommerce/single-product/related.php بروید و فایل مذکور را ارسال کنید تا بررسی انجام شود و در صورت وجود کد های اولیه هماهنگی انجام داد

4 پسندیده

related.zip (1.1 کیلوبایت)

خیلی خیلی ممنون

سلام
فقط قربان عذر میخوام این فایل 4تا پست نمایش میده فقط؟

سلام خدمت شما
کد های زیر را در فایل مذکور جایگزین کنید

<?php
/**
 * Related Products
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 * Edited By  Hosein Gh iranwp.net
 * @see         https://docs.woocommerce.com/document/template-structure/
 * @package     WooCommerce/Templates
 * @version     3.9.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

$title_style = mweb_theme_util::get_theme_option('box_layout' );
$product_type = mweb_theme_util::get_theme_option('product_archive_default_type' );

$is_mobile = wp_is_mobile();
$product_type = !$is_mobile ? :'';


if ( $related_products ) : ?>

	<section class="block-wrap related products<?php echo ' prdtype_'.$product_type; ?>">

		<?php
		$heading = apply_filters( 'woocommerce_product_related_products_heading', __( 'Related products', 'woocommerce' ) );

		if ( $heading ) :
			?>
			<div class="block-title title--decor<?php echo $title_style ?>"><?php echo esc_html( $heading ); ?></div>
		<?php endif; ?>
		
		<?php //woocommerce_product_loop_start(); ?>
		<div class="owl-carousel mw-owl-carousel owl_autowidth" data-margin="10" data-nav="true"  data-dots="false"  data-rtl="true" data-loop="false" data-responsiveClass="true" data-responsive='{"0":{"items":2},"600":{"items":2},"768":{"items":3},"1000":{"items":4},"1200":{"items":5}}'>

			<?php $post_id = get_the_id();
				$terms = wp_get_post_terms( $post_id, 'product_cat' );
				$term_ids = array();
				
				foreach ($terms as $key => $value) {
					$term_ids[] = $value->term_id;
				}
				$args = array(
				  'post_type'            => 'product',
				  'ignore_sticky_posts'  => 1,
				  'no_found_rows'        => 1,
				  'orderby'              => 'date',
				  'meta_query' => array(
						array(
							'key' => '_stock_status',
							'value' => 'instock'
						),
					),
				  'tax_query' => array(
					array(
					  'taxonomy' => 'product_cat',
					  'field'    => 'term_id',
					  'terms'    => $term_ids,
					),
				  ),
				  'post__not_in'         => array( $post_id )
				);
				
				$my_query = new WP_Query($args);
				while ($my_query->have_posts()):
					$my_query->the_post();
						//$post_object = get_post( $related_product->get_id() );
					//setup_postdata( $GLOBALS['post'] =& $post_object );
					if($is_mobile){
						echo '<div class="item">';
						get_template_part( 'templates/loop', 'mobile_related' );
						echo '</div>';
					}else{
							wc_get_template_part( 'content', 'product_related' ); 
					}
				endwhile; wp_reset_postdata(); ?>
			
		</div>
		<?php //woocommerce_product_loop_end(); ?>

	</section>

<?php endif;

wp_reset_postdata();
4 پسندیده

خیلی ممنون
لطف کردین
ولی این شد مثل روز اولش
سری قبل که رحیم جان لطف کرده بودن درست بود فقط نحوه ی نمایش درست نبود
اما الان کلا شد مثل اولش یعنی محصولاتی معرفی میکنه بی ربط هستن

سلام خدمت شما
کدی که خدمتتون ارسال کردم چندتا فیلتر دارد که عبارت است از : برحسب دسته بندی , موجود بودن محصول , فیلتر بر حسب زمان میباشد

که برحسب دسته بندی همونیه که شما میخواهید
توسعه یافته کد های مهندس هست که خدمتتون ارسال کردم

کد زیر همون کدیه که رحیم جان قرار دادند که با کد های فایلی که ارسال کردید هماهنگ شده است

<?php
/**
 * Related Products
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see         https://docs.woocommerce.com/document/template-structure/
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     3.9.0
 */

if ( ! defined( 'ABSPATH' ) ) {
  exit;
}

global $product, $woocommerce_loop;

if ( empty( $product ) || ! $product->exists() ) {
  return;
}

if ( ! $related = $product->get_related( $posts_per_page ) ) {
  return;
}

// Get ID of current product, to exclude it from the related products query
$current_product_id = $product->get_id();

$cats_array = array(0);

// get categories
$terms = wp_get_post_terms( $product->id, 'product_cat' );

// select only the category which doesn't have any children
foreach ( $terms as $term ) {
  $children = get_term_children( $term->term_id, 'product_cat' );
  if ( !sizeof( $children ) )
  $cats_array[] = $term->term_id;
}

$args = apply_filters( 'woocommerce_related_products_args', array(
  'post_type' => 'product',
  'post__not_in' => array( $current_product_id ),   // exclude current product
  'ignore_sticky_posts' => 1,
  'no_found_rows' => 1,
  'posts_per_page' => $posts_per_page,
  'orderby' => $orderby,
  'tax_query' => array(
    array(
        'taxonomy' => 'product_cat',
        'field' => 'id',
        'terms' => $cats_array
    ),
  )
));

$products                    = new WP_Query( $args );
$woocommerce_loop['name']    = 'related';
$woocommerce_loop['columns'] = apply_filters( 'woocommerce_related_products_columns', $columns );

if ( $products->have_posts() ) : ?>

  <?php
		$heading = apply_filters( 'woocommerce_product_related_products_heading', __( 'Related products', 'woocommerce' ) );

		if ( $heading ) :
			?>
			<div class="block-title title--decor<?php echo $title_style ?>"><?php echo esc_html( $heading ); ?></div>
		<?php endif; ?>
		
		<?php //woocommerce_product_loop_start(); ?>
		<div class="owl-carousel mw-owl-carousel owl_autowidth" data-margin="10" data-nav="true"  data-dots="false"  data-rtl="true" data-loop="false" data-responsiveClass="true" data-responsive='{"0":{"items":2},"600":{"items":2},"768":{"items":3},"1000":{"items":4},"1200":{"items":5}}'>


      <?php while ( $products->have_posts() ) : $products->the_post(); ?>

        <?php 	
			$post_object = get_post( $related_product->get_id() );
			setup_postdata( $GLOBALS['post'] =& $post_object );
			if($is_mobile){
				echo '<div class="item">';
				get_template_part( 'templates/loop', 'mobile_related' );
				echo '</div>';
			}else{
				wc_get_template_part( 'content', 'product_related' ); 
			}
					?>

      <?php endwhile; // end of the loop. ?>

    </div>
		<?php //woocommerce_product_loop_end(); ?>

	</section>

<?php endif;

wp_reset_postdata();
3 پسندیده

درسته بنده متوجه فرمایشات شما هستم بزرگوار ولی مشکل اینجاست من اونو میذارم درسته فقط نمایشش مشکل داره
این جدیدی که دادین گذاشتم که کلا ریخت بهم :

[https://bazarche.xyz/product/خرید-دسته-بازی-ونوس-مدل-pv-g212/](https://bazarche.xyz/product/%d8%ae%d8%b1%db%8c%d8%af-%d8%af%d8%b3%d8%aa%d9%87-%d8%a8%d8%a7%d8%b2%db%8c-%d9%88%d9%86%d9%88%d8%b3-%d9%85%d8%af%d9%84-pv-g212/)

میگم نیاز به ادیت functions نیست ؟

این کد نباید بذاریم ازون طرفم اون کده توی فایل functions بذاریم ؟

همون کد که ابتدای پست رحیم جان دادن

سلام خدمت شما
یک دسترسی به پیشخوان ارسال بفرمایید تا این مورد را رفع کنم

3 پسندیده

خیلی خیلی ممنون

ارسال شد

2 پسندیده