سلام دوستای عزیز. خیلی وقته سایت رو آپدیت نکردم. مقاله امروزم درباره طراحی قالب وردپرس نیست. راستش هنوز آماده اش نکردم. این دفعه می خواهم یاد بدم که چطوری ابزار نمایش مطالب براساس دسته بندی رو بسازیم

بسیار خب شروع می کنیم

ساخت ابزارک نمایش مطالب براساس دسته بندی

خب اولین قدممون برای ساخت ابزارک اینه که کلاس مربوط بهش رو تعریف کنیم. پس طبق معمول به سراغ فایل functions.php میریم. در انتهای فایل این کد رو اضافه کنید

class CategoryPosts extends WP_Widget {

	function CategoryPosts() {
		$widget_ops = array('classname' => 'cat-post-widget', 'description' => __('نمایش نوشته های مربوط به دسته خاص')); // توضیحات مربوط به ابزارک در اینجا
		$this->WP_Widget('category-posts', __('نمایش نوشته ها براساس دسته بندی'), $widget_ops);  // نام ابزارک در اینجا
	}

خب با کد بالا کلاس مربوط به ابزارک رو ساختیم

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

پس این کد رو هم در ادامه اضافه کنید

function widget($args, $instance) {
		global $post;
		$post_old = $post; // ذخیره مطلب
		
		extract( $args );
		
		$sizes = get_option('mkrdip_cat_post_thumb_sizes');
		
		// اگر عنوانی وارد نشد از نام دسته بندی استفاده میشه
		if( !$instance["title"] ) {
			$category_info = get_category($instance["cat"]);
			$instance["title"] = $category_info->name;
	  }

	  $valid_sort_orders = array('date', 'title', 'comment_count', 'rand');
	  if ( in_array($instance['sort_by'], $valid_sort_orders) ) {
		$sort_by = $instance['sort_by'];
		$sort_order = (bool) isset( $instance['asc_sort_order'] ) ? 'ASC' : 'DESC';
	  } else {
		// این بخش مربوط به مرتب سازی هستش
		$sort_by = 'date';
		$sort_order = 'DESC';
	  }
		
		// آرایه ای از اطلاعات مطالب را بر می گرداند
	  $cat_posts = new WP_Query(
		"showposts=" . $instance["num"] . 
		"&cat=" . $instance["cat"] .
		"&orderby=" . $sort_by .
		"&order=" . $sort_order
	  );

		// طول چکیده را تعیین می کند
		$new_excerpt_length = create_function('$length', "return " . $instance["excerpt_length"] . ";");
		if ( $instance["excerpt_length"] > 0 )
			add_filter('excerpt_length', $new_excerpt_length);
		
		echo $before_widget;
		
		// عنوان ابزارک
		echo $before_title;
		if( isset( $instance["title_link"] ) )
			echo '<a href="' . get_category_link($instance["cat"]) . '">' . $instance["title"] . '</a>';
		else
			echo $instance["title"];
		echo $after_title;

		// لیست مطالب
		echo "<ul>\n";
		
		while ( $cat_posts->have_posts() )
		{
			$cat_posts->the_post();
		?>
			<li class="cat-post-item">
				<a class="post-title" href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
				

				<?php if ( isset( $instance['date'] ) ) : ?>
				<p class="post-date"><?php the_time("j M Y"); ?></p>
				<?php endif; ?>
				
				<?php
					if (
						function_exists('the_post_thumbnail') &&
						current_theme_supports("post-thumbnails") &&
						isset( $instance["thumb"] ) &&
						has_post_thumbnail()
					) :
				?>
					<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
					<?php the_post_thumbnail( 'cat_post_thumb_size'.$this->id ); ?>
					</a>
				<?php endif; ?>
							
				<?php if ( isset( $instance['excerpt'] ) ) : ?>
				<?php the_excerpt(); ?> 
				<?php endif; ?>
				
				<?php if ( isset( $instance['comment_num'] ) ) : ?>
				<p class="comment-num">(<?php comments_number(); ?>)</p>
				<?php endif; ?>
			</li>
			<?php
		}
		
		echo "</ul>\n";
		
		echo $after_widget;

		remove_filter('excerpt_length', $new_excerpt_length);
		
		wp_reset_postdata();
	
	}

خب حالا باید کد مربوط به ذخیره اطلاعات وارد شده رو قرار بدیم.

/**
	 * ذخیره اطلاعات انتخاب شده
	 *
	 */
	function update($new_instance, $old_instance) {
		$sizes = get_option('mkrdip_cat_post_thumb_sizes');
			
		if ( !$sizes ) {
			$sizes = array();
		}
		
		$sizes[$this->id] = array($new_instance['thumb_w'], $new_instance['thumb_h']);
		update_option('mkrdip_cat_post_thumb_sizes', $sizes);
				
		return $new_instance;
	}

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

پس این کد رو هم اضافه می کنیم

 

	function form($instance) {
		$instance = wp_parse_args( ( array ) $instance, array(
			'title'          => __( '' ),
			'cat'			 => __( '' ),
			'num'            => __( '' ),
			'sort_by'        => __( '' ),
			'asc_sort_order' => __( '' ),
			'title_link'	 => __( '' ),
			'excerpt'        => __( '' ),
			'excerpt_length' => __( '' ),
			'comment_num'    => __( '' ),
			'date'           => __( '' ),
			'thumb'          => __( '' ),
			'thumb_w'        => __( '' ),
			'thumb_h'        => __( '' )
		) );

		$title          = $instance['title'];
		$cat 			= $instance['cat'];
		$num            = $instance['num'];
		$sort_by        = $instance['sort_by'];
		$asc_sort_order = $instance['asc_sort_order'];
		$title_link		= $instance['title_link'];		
		$excerpt        = $instance['excerpt'];
		$excerpt_length = $instance['excerpt_length'];
		$comment_num    = $instance['comment_num'];
		$date           = $instance['date'];
		$thumb          = $instance['thumb'];
		$thumb_w        = $instance['thumb_w'];
		$thumb_h        = $instance['thumb_h'];
				
			?>
			<p>
				<label for="<?php echo $this->get_field_id("title"); ?>">
					<?php _e( 'عنوان' ); ?>:
					<input class="widefat" id="<?php echo $this->get_field_id("title"); ?>" name="<?php echo $this->get_field_name("title"); ?>" type="text" value="<?php echo esc_attr($instance["title"]); ?>" />
				</label>
			</p>
			
			<p>
				<label>
					<?php _e( 'دسته بندی' ); ?>:
					<?php wp_dropdown_categories( array( 'name' => $this->get_field_name("cat"), 'selected' => $instance["cat"] ) ); ?>
				</label>
			</p>
			
			<p>
				<label for="<?php echo $this->get_field_id("num"); ?>">
					<?php _e('تعداد مطالب برای نمایش'); ?>:
					<input style="text-align: center;" id="<?php echo $this->get_field_id("num"); ?>" name="<?php echo $this->get_field_name("num"); ?>" type="text" value="<?php echo absint($instance["num"]); ?>" size='3' />
				</label>
			</p>

			<p>
				<label for="<?php echo $this->get_field_id("excerpt"); ?>">
					<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("excerpt"); ?>" name="<?php echo $this->get_field_name("excerpt"); ?>"<?php checked( (bool) $instance["excerpt"], true ); ?> />
					<?php _e( 'نمایش چکیده مطالب' ); ?>
				</label>
			</p>
			
			<p>
				<label for="<?php echo $this->get_field_id("excerpt_length"); ?>">
					<?php _e( 'طول چکیده:' ); ?>
				</label>
				<input style="text-align: center;" type="text" id="<?php echo $this->get_field_id("excerpt_length"); ?>" name="<?php echo $this->get_field_name("excerpt_length"); ?>" value="<?php echo $instance["excerpt_length"]; ?>" size="3" />
			</p>
			
			<p>
				<label for="<?php echo $this->get_field_id("comment_num"); ?>">
					<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("comment_num"); ?>" name="<?php echo $this->get_field_name("comment_num"); ?>"<?php checked( (bool) $instance["comment_num"], true ); ?> />
					<?php _e( 'نمایش تعداد دیدگاه ها' ); ?>
				</label>
			</p>
			
			<p>
				<label for="<?php echo $this->get_field_id("date"); ?>">
					<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("date"); ?>" name="<?php echo $this->get_field_name("date"); ?>"<?php checked( (bool) $instance["date"], true ); ?> />
					<?php _e( 'نمایش تاریخ مطلب' ); ?>
				</label>
			</p>
			
			<?php if ( function_exists('the_post_thumbnail') && current_theme_supports("post-thumbnails") ) : ?>
			<p>
				<label for="<?php echo $this->get_field_id("thumb"); ?>">
					<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("thumb"); ?>" name="<?php echo $this->get_field_name("thumb"); ?>"<?php checked( (bool) $instance["thumb"], true ); ?> />
					<?php _e( 'نمایش تصویر شاخص' ); ?>
				</label>
			</p>
			<p>
				<label>
					<?php _e('اندازه تصویر شاخص'); ?>:<br />
					<label for="<?php echo $this->get_field_id("thumb_w"); ?>">
						عرض: <input class="widefat" style="width:30%;" type="text" id="<?php echo $this->get_field_id("thumb_w"); ?>" name="<?php echo $this->get_field_name("thumb_w"); ?>" value="<?php echo $instance["thumb_w"]; ?>" />
					</label>
					
					<label for="<?php echo $this->get_field_id("thumb_h"); ?>">
						ارتفاع: <input class="widefat" style="width:30%;" type="text" id="<?php echo $this->get_field_id("thumb_h"); ?>" name="<?php echo $this->get_field_name("thumb_h"); ?>" value="<?php echo $instance["thumb_h"]; ?>" />
					</label>
				</label>
			</p>
			<?php endif; ?>

			<?php

		}

}

add_action( 'widgets_init', create_function('', 'return register_widget("CategoryPosts");') );

 

حالا سیو کنید و ابزارک رو تست کنید

به همین سادگی!

خب مقاله امروز مدرسه وردپرس تحت عنوان آموزش ابزارک نمایش مطالب براساس دسته بندی هم به پایان رسید. امیدوارم که آموزش ساده و روان بوده باشه

اگر مشکلی در ابزارک بود دوباره آموزش رو چک کنید چرا که آموزش تست شده هستش

فقط کدهای مربوط به CSS رو خودتون باید انجام بدید

موفق باشید D:

 

19 دیدگاه برای “ساخت ابزارک نمایش مطالب براساس دسته بندی

  • مرتضی عظیمی
    - ۲۴ اسفند , ۱۳۹۳

    خیلی ممنون

  • میثم
    - ۱۸ فروردین , ۱۳۹۴

    وقعا عالی بود.متشکرم

  • رضا کیانوش
    - ۲۸ فروردین , ۱۳۹۴

    اموزش خوبی بود خسته نباشید

  • سهراب
    - ۷ اردیبهشت , ۱۳۹۴

    وقتی این کدها رو قرار میدم این ارور رو میده:
    Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in E:\xampp\htdocs\wp\wp-content\themes\khabaronline\functions.php on line 313

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

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

    • سهراب
      - ۷ اردیبهشت , ۱۳۹۴

      اون ارور با یک ” } ” مشکلش حل شد.
      اما کدهایی رو که باید برای تنظیمات ابزارک رو بزاریم نمیبینم.

    • الناز
      - ۱۳ اردیبهشت , ۱۳۹۴

      سلام دوست من. ممنون بابت اطلاع رسانی. مقاله به روز شد و کد هم درج شد

  • به روز پوشان
    - ۱۰ اردیبهشت , ۱۳۹۴

    سلام
    مطالب سایتتون خیلی عالیه
    واقعا توی سایت خودم بهم کمک کرد
    ممنون

  • sahar
    - ۲۹ اردیبهشت , ۱۳۹۴

    لطفن در تمامی موارد بفرمایید این عملیات در هاست هستش یا در مدیریت سایت

  • مهدی
    - ۲۲ خرداد , ۱۳۹۴

    سلام با تشکر ا ز اموزش ها تون فقط من هیچی شو متوجه نمی شم من برنامه نویس c هستم و این کد ها تون رو اصلا متوجه نمیشم باید چی کار کنم

    • الناز
      - ۶ تیر , ۱۳۹۴

      سلام دوست من. بیشتر کدهایی که در آموزش ها قرار داده شده توابع وردپرس هستند. بهتره کمی php هم مطالعه کنید

  • may
    - ۱۳ شهریور , ۱۳۹۴

    سلام
    یک عکس از ابزارک بزار تا ببینیم نتیجه نهایی چطوری میشه؟
    تغریبا کل مطالب سایتت بدون عکس نهایی است چرا !

    • الناز
      - ۱۶ شهریور , ۱۳۹۴

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

  • آرین
    - ۱۷ بهمن , ۱۳۹۴

    سلام یک سوال داشتم
    تفاوت میان این تدریس و ساید بار چی؟

    • الناز
      - ۳ اسفند , ۱۳۹۴

      سلام دوست عزیز. شما با این آموزش می تونید یک ابزارک برای نمایش مطالب بسازید اما سایدبار جایگاهی هستش که ابزارک ها درش قرار میگیره

  • حامد
    - ۷ خرداد , ۱۳۹۵

    سلام دوست عزیز
    با تشکر از مطلبی که در سایت درج کرده اید. فقط یک مشکل وجود دارد مبنی بر این کد مربوط به فرم تنظیماتی برای ابزارک درج می کنم، فرم ها را نمایش نمی دهد.
    بایدچه کاری را انجام دهم

    • الناز
      - ۸ خرداد , ۱۳۹۵

      سلام حامد جان. لطفا کدتو بفرس واسم بررسی کنم

  • omid ghs
    - ۴ اسفند , ۱۳۹۶

    بیشتر از ده بار امتحان کردم . نتیجه ای نداشت . کلا ابزارک فعال نمیشه با این کدها

  • omid ghs
    - ۴ اسفند , ۱۳۹۶

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

    • سیروس
      - ۵ اسفند , ۱۳۹۶

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

دیدگاه خود را بیان کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --