رفتن به مطلب

استفاده از لیست دسته بندی مادر در دسته بندی دیگر


پست های پیشنهاد شده

سلام به دوستان 

نمیدونم این کاری میخوام انجام بدم با وردپرس شدنی هست یا نه؟

 

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

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

pro.jpg.ec53015f00023b0077c49c113b20aca5

 

تصویر بالا رو نگاه کنید 

 

میخوام داخل صفحه محصولات مثلا کفش  از برند پوما هر چی محصول داره نشون داده بشه

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

حالا چون اینجا دسته مادر تغییر میکنه من نمیتونم برنامه اش رو طوری بنویسم که سیستم خودکار داخل کل محصولات بگرده و برند نایک هر چی محصول داره در صفحه محصول نشون داده بشه

 

اول خواستم دسته بندی رو بر مبنای برند تنظیم کنم اما امکان چیدمان محصولات نشد و مجبوریم که طبق تصویر دسته بندی کنیم

میدونم میشه بصورت دستی داخل صفحه category شرط گذاشت که اگه محصول نایک بود فلان تابع category رو فراخوانی کن تا محصولاتش لیست بشه

 

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

فکر کنم نتونستم منظورم رو برسونم

pro2.jpg.cafc9ac593f8bc83576c16a0670823c

لینک به ارسال

روشتون اشتباهه

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

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

لینک به ارسال

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

ابتدا این کدها رو در فایل functions.php  قرار می دید تا طبقه بندی ساخته بشه و مقدار فیلد جستجو برای طبقه بندی شما ست بشه 

<?php
function create_brands_tax() {

	$labels = array(
		'name'                       => _x( 'Brands', 'Taxonomy General Name', 'fakhar' ),
		'singular_name'              => _x( 'Brand', 'Taxonomy Singular Name', 'fakhar' ),
		'menu_name'                  => __( 'Brands', 'fakhar' ),
		'all_items'                  => __( 'All Brands', 'fakhar' ),
		'parent_item'                => __( 'Parent Brand', 'fakhar' ),
		'parent_item_colon'          => __( 'Parent Brand:', 'fakhar' ),
		'new_item_name'              => __( 'New Brand Name', 'fakhar' ),
		'add_new_item'               => __( 'Add New Brand', 'fakhar' ),
		'edit_item'                  => __( 'Edit Brand', 'fakhar' ),
		'update_item'                => __( 'Update Brand', 'fakhar' ),
		'view_item'                  => __( 'View Brand', 'fakhar' ),
		'separate_items_with_commas' => __( 'Separate items with commas', 'fakhar' ),
		'add_or_remove_items'        => __( 'Add or remove Brands', 'fakhar' ),
		'choose_from_most_used'      => __( 'Choose from the most used', 'fakhar' ),
		'popular_items'              => __( 'Popular Brands', 'fakhar' ),
		'search_items'               => __( 'Search Brands', 'fakhar' ),
		'not_found'                  => __( 'Not Found', 'fakhar' ),
		'no_terms'                   => __( 'No Brands', 'fakhar' ),
		'items_list'                 => __( 'Items list', 'fakhar' ),
		'items_list_navigation'      => __( 'Items list navigation', 'fakhar' ),
	);
	$args = array(
		'labels'                     => $labels,
		'hierarchical'               => true,
		'public'                     => true,
		'show_ui'                    => true,
		'show_admin_column'          => true,
		'show_in_nav_menus'          => true,
		'show_tagcloud'              => true,
	);
	register_taxonomy( 'brands', array( 'post' ), $args );

}
add_action( 'init', 'create_brands_tax', 0 );
add_action( 'pre_get_posts', 'foo_set_cat_query_by_brands_meta' );
function foo_set_cat_query_by_brands_meta( $query ) {
    if ( ! is_admin() && $query->is_main_query() && is_search() && isset($_GET['b']) && $_GET['b'] != 'all') {
    $b = $_GET['b'];
        $query->set( 'tax_query', array(array('taxonomy' => 'brands','field'    => 'term_id','terms'    => $b)) );
}}
?>

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

این کدها رو در محل دلخواه سایتتون بگذارید (استایل دهی و موارد جانبی دیگه اش به خودتون و قالبتون مربوط می شه) به عنوان مثال فایل header.php  یا  footer.php  یا sidebar.php 

<?php
if(isset($_GET['b'])) {
$mb = $_GET['b'];
}
else {
$mb = 'all';
}
if(isset($_GET['cat'])) {
$mc = $_GET['cat'];
}
else {
$mc = '';
}
if(isset($_GET['s'])) {
$ms = $_GET['s'];
}
else {
$ms = '';
}

$categories = get_terms('category', array(
    'orderby' => 'name',
    'parent'  => 0
) );
 
?>
<form method="get" class="form-horizontal" action="<?php bloginfo('url');?>" id="searchForm">
	<p class="form-group has-feedback"><input type="search" name="s" class="form-control" value="<?php echo $ms;?>" placeholder="عبارتی را برای جستجو وارد نمایید"><button type="submit" class="form-control-feedback btn btn-primary" style="padding:inherit;left:0;"><i class="fa fa-search"></i></button></p>
	<p>دسته مورد نظر را انتخاب نمایید: </p>
	<div id="parent-catTable">
	<ul id="parent-cat">
	<?php
	foreach ( $categories as $category ) {
	$childs = get_terms('category', array(
    'orderby' => 'name',
    'parent'  => $category->term_id
    ) );
	if ( ! empty( $childs ) && ! is_wp_error( $childs ) ) {
	echo '<li class="parent"><input type="checkbox" id="cat-'.$category->term_id.'" value="'.$category->term_id.'" name="cat" ';
	checked($mc, $category->term_id);
	echo '><strong><label for="cat-'.$category->term_id.'">'.$category->name.'</label></strong>';
	echo '<ul class="childscat" id="childOf-'.$category->term_id.'">';
	foreach ( $childs as $child ) {
	echo '<li><label><input name="cat" type="checkbox" value="'.$child->term_id.'" ';
	checked($mc, $child->term_id);
	echo '><span>'.$child->name.'</span></label></li>';
	}
	echo '</ul>';
	echo '</li>';
	}
	else {
	echo '<li><label><input name="cat" type="checkbox" value="'.$category->term_id.'"><span>'.$category->name.'</span></label></li>';
	}
	}
?>
	</ul>
	</div>
	<p> برند مورد نظر را انتخاب نمایید</p>
<?php	
$brands = get_terms('brands', array(
    'orderby' => 'name',
) );
 
?>
	<div class="brands btn-group" data-toggle="buttons">
	<label class="btn btn-default <?php if($mb=='all') echo 'active';?>"><input type="radio" name="b" value="all" <?php checked($mb, 'all');?>>همه برندها</label>	<?php
	foreach ( $brands as $term ) {
	echo '<label class="btn btn-default';
	if($mb == $term->term_id) {
	echo ' active';
	}
	echo '"><input name="b" type="radio" value="'.$term->term_id.'" ';
	checked($mb, $term->term_id);
	echo '><i class="icon-'.$term->term_id.'"></i> '.$term->name.'</label>';
	}
?>
	</div>
<script>
jQuery(document).ready(function($) {
  $("#parent-cat").find("ul").find("input:checked").each(function() {
  	$(this).parent("label").parent("li").parent("ul").prev("strong").prev("input").prop("checked", true);
  });
});
</script>	

</form>

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

لینک به ارسال

استاد خیلی ممنون از لطفتون

بله همانطور که فرمودین کار کردش

اما من میخواستم سیستم خودکار سرچ کنه و نمایش بده یعنی کوئری بگیره

لینک به ارسال

چجوری خودکار؟

به هر حال باید کاربر برند دلخواهش رو انتخاب کنه و الا خود سیستم که نمی تونه خودکار کاری رو انجام بده اگر مشکلتون با فرم جستجوست می تونید فرم رو حذف کنید و مقدار b رو با متد GET ارسال کنید به صفحه بایگانی و در کدهای تابع هم این خط رو بیابید 

if ( ! is_admin() && $query->is_main_query() && is_search() && isset($_GET['b']) && $_GET['b'] != 'all') {

و تغییر بدید به 

if ( ! is_admin() && $query->is_main_query() && is_category() && isset($_GET['b']) && $_GET['b'] != 'all') {

 و یا به هر شکل دلخواه دیگه ای شخصی سازیش کنید من اول مطلب عرض کردم این یک نمونه است و شما می تونید ازش برای رسیدن به خواستتون استفاده کنید ...

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...