فرهاد

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

5 پست در این موضوع قرار دارد

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

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

 

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

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

pro.jpg.ec53015f00023b0077c49c113b20aca5

 

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

 

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

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

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

 

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

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

 

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

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

pro2.jpg.cafc9ac593f8bc83576c16a0670823c

0

به اشتراک گذاری این پست


لینک به پست

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

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

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

1

به اشتراک گذاری این پست


لینک به پست

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

ابتدا این کدها رو در فایل 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>

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

1

به اشتراک گذاری این پست


لینک به پست

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

به هر حال باید کاربر برند دلخواهش رو انتخاب کنه و الا خود سیستم که نمی تونه خودکار کاری رو انجام بده اگر مشکلتون با فرم جستجوست می تونید فرم رو حذف کنید و مقدار 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') {

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

1

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری