رفتن به مطلب

ساخت افزونه


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

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

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


<?php
/*
Plugin Name: Site Plugin for example.com
Description: Site specific code changes for example.com
*/
کد خودتون رو اینجا وارد کنید.
?>

در جایی هم که نوشته " کد خود را وارد کنید" باید کد های افزونمون رو وارد کنیم

خب در این قسمت من یک فانکشن برای ساخت ابزارک تعریف کردم


add_action( 'widgets_init', 'widget_tabs' );
function widget_tabs_box(){
register_widget( 'widget_tabs' );
}

و در ادامش کد های ابزارک را . که با تعریف کلاس ابزارک شروع میشه رو باید بگذاریم :


class widget_tabs extends WP_Widget {
function widget_tabs() {
$widget_ops = array( 'description' => 'Most Popular, Recent, Comments, Tags' );
$this->WP_Widget( 'widget_tabs',theme_name .'- Tabbed ', $widget_ops );
}
function widget( $args, $instance ) {

?>
<div class="widget" id="tabbed-widget">
<div class="widget-container">
<div class="widget-top">
<ul class="tabs posts-taps">
<li class="tabs"><a href="#tab1"><?php _e( 'پر بازدیدترین مطالب ' , 'tie' ) ?></a></li>
<li class="tabs"><a href="#tab2"><?php _e( 'Recent' , 'tie' ) ?></a></li>
<li class="tabs"><a href="#tab3"><?php _e( 'Comments' , 'tie' ) ?></a></li>
</ul>
</div>
<div id="tab1" class="tabs-wrap">
<ul>

<?php
query_posts('meta_key=post_views_count&orderby=meta_value_num&order=DESC&showposts=13');
if (have_posts()) : while (have_posts()) : the_post(); ?>

<table style="height:20px;border-bottom:1px solid #ccc;background:#dddddd;line-height:1.5em;">
<td style="width:440px;">

<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

</td>
</table>

<?php
endwhile; endif;
wp_reset_query();
?>

</ul>
</div>
<div id="tab2" class="tabs-wrap">
<ul>
<?php tie_last_posts( $posts_number )?>
</ul>
</div>
<div id="tab3" class="tabs-wrap">
<ul>
<?php tie_most_commented( $posts_number );?>
</ul>
</div>
</div>
</div><!-- .widget /-->
<?php
}

}

افزونه ما ساخته شد . فقط میخوام چند تا امکان بهش اضافه کنم . در قسمت پربازدیترین مطالب که یه کوئری گذاشتیم میخوام در کوئری این فایل ایدی cat مشخص نشه . در واقع میخوام در قسمت مدیریت ابزارکمون یه فیلد ایجاد بشه و در اونجا بشه ایدی دسته رو گذاشت . فکر کنم هم باید کوئری رو باید دست کاری کرد هم یه فیلد درست کنیم خب باید یه فیلد درست کنیم و بهش بگیم در این فیلد هر عددی وارد شد اون رو در کوئری و برای مقدار cat منظور کن . البته اگه درست گفته باشم . خب میشه کمک کنید

ویرایش شده توسط ssll
لینک به ارسال

در کلاس (کد سوم) این کد را قرار دهید


/**
* Back-end widget form.
*
* @see WP_Widget::form()
*
* @param array $instance Previously saved values from database.
*/
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'New title', 'text_domain' );
}
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
<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( $title ); ?>">
</p>
<?php
}
/**
* Sanitize widget form values as they are saved.
*
* @see WP_Widget::update()
*
* @param array $new_instance Values just sent to be saved.
* @param array $old_instance Previously saved values from database.
*
* @return array Updated safe values to be saved.
*/
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
return $instance;
}

و در تابع widget

مقدار ذخیره شده را نمایش دهید:


$title = apply_filters( 'widget_title', $instance['title'] );

http://codex.wordpress.org/Widgets_API

(نام متغییرها را به نام دلخواه تغییر دهید)

لینک به ارسال

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


<?php
/*
Plugin Name: test
Description: Site specific code changes for http://www......ir.
*/
/* Start Adding Functions Below this Line */


## widget_tabs
add_action( 'widgets_init', 'widget_tabn' );
function widget_tabn(){
register_widget( 'widget_tabn' );
}
class widget_tabn extends WP_Widget {
function widget_tabn() {
$widget_ops = array( 'description' => 'Most Popular, Recent, Comments, Tags' );
$this->WP_Widget( 'widget_tabn',theme_name .'- test ', $widget_ops );
}
function widget( $args, $instance ) {

?>
<div class="widget" id="tabbed-widget">
<div class="widget-container">
<div class="widget-top">
<ul class="tabs posts-taps">
<li class="tabs"><a href="#tab1"><?php _e( 'پر بازدیدترین مطالب ' , 'tie' ) ?></a></li>
<li class="tabs"><a href="#tab2"><?php _e( 'Recent' , 'tie' ) ?></a></li>
<li class="tabs"><a href="#tab3"><?php _e( 'Comments' , 'tie' ) ?></a></li>
</ul>
</div>
<div id="tab1" class="tabs-wrap">
<ul>
<?php
query_posts('meta_key=post_views_count&orderby=meta_value_num&order=DESC&showposts=13');
if (have_posts()) : while (have_posts()) : the_post(); ?>

<table style="height:20px;border-bottom:1px solid #ccc;background:#dddddd;line-height:1.5em;">
<td style="width:440px;">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</td>
</table>
<?php
endwhile; endif;
wp_reset_query();
?>
</ul>
</div>
<div id="tab2" class="tabs-wrap">
<ul>
<?php tie_last_posts( $posts_number )?>
</ul>
</div>
<div id="tab3" class="tabs-wrap">
<ul>
<?php tie_most_commented( $posts_number );?>
</ul>
</div>
</div>
</div><!-- .widget /-->
<?php
}
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'New title', 'text_domain' );
}
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
<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( $title ); ?>">
</p>
<?php
}
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
return $instance;
}

}

/* Stop Adding Functions Below this Line */
?>

کد زیر رو هم ندونستم کجا اضافه کنم


<?php if ( dynamic_sidebar('example_widget_area_name') ) : else : endif; ?>

ویرایش شده توسط ssll
لینک به ارسال

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

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

لینک به ارسال

ابتدای در تابع widget قرار دهید:


if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'New title', 'text_domain' );
}

استفاده:


query_posts('cat='.$title);

لینک به ارسال

الان مشکل کد های این افزونه چی هست؟


<?php
/*
Plugin Name:test
Description: Site specific code changes for http://www.test.ir.com
*/
/* Start Adding Functions Below this Line */

## widget_tabs
add_action( 'widgets_init', 'widget_tabn' );
function widget_tabn(){
register_widget( 'widget_tabn' );
}
class widget_tabn extends WP_Widget {
function widget_tabn() {
$widget_ops = array( 'description' => 'Most Popular, Recent, Comments, Tags' );
$this->WP_Widget( 'widget_tabn',theme_name .'- vvvvvvvvvTabbed ', $widget_ops );
}
function widget( $args, $instance ) {
?>
<div class="widget" id="tabbed-widget">
<div class="widget-container">
<div class="widget-top">
<ul class="tabs posts-taps">
<li class="tabs"><a href="#tab1"><?php _e( 'مطالب یک دسته ' , 'tie' ) ?></a></li>
<li class="tabs"><a href="#tab2"><?php _e( 'Recent' , 'tie' ) ?></a></li>
<li class="tabs"><a href="#tab3"><?php _e( 'Comments' , 'tie' ) ?></a></li>
</ul>
</div>
<div id="tab1" class="tabs-wrap">
<ul>
<?php

query_posts('cat='.$titlee);
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if ( dynamic_sidebar('example_widget_area_name') ) : else : endif; ?>
<table style="height:20px;border-bottom:1px solid #ccc;background:#dddddd;line-height:1.5em;">
<td style="width:440px;">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</td>
</table>
<?php
endwhile; endif;
wp_reset_query();
?>
</ul>
</div>
<div id="tab2" class="tabs-wrap">
<ul>
<?php tie_last_posts( $posts_number )?>
</ul>
</div>
<div id="tab3" class="tabs-wrap">
<ul>
<?php tie_most_commented( $posts_number );?>
</ul>
</div>
</div>
</div><!-- .widget /-->
<?php
}
public function form( $instance ) {
if ( isset( $instance[ 'titlee' ] ) ) {
$title = $instance[ 'titlee' ];
}
else {
$title = __( 'New title', 'text_domain' );
}
?>
<p>
<label for="<?php echo $this->get_field_id( 'titlee' ); ?>"><?php _e( 'titlee:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'titlee' ); ?>" name="<?php echo $this->get_field_name( 'titlee' ); ?>" type="text" value="<?php echo esc_attr( $titlee ); ?>">
</p>
<?php
}
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
return $instance;
}
}

?>

لینک به ارسال

مقدار کات در کوئری اضافه نمیشه . یعنی وقتی عدد رو وارد فیلد میکنم و ذخیره رو میزنم عدد محو میشه و در کوئری هم عمل نمیکنه

در کل اگه بخوام این کوئری دسته شماره 4 رو در ابزارک نشون بده . در واقع باید ایدی دسته را در فیلد وارد کنم و ذخیره کنم و در ابزارک هم مطالب همون دسته نشون داده بشه . نه عدد در فیلد ذخیره میشه و نه مطالب اون دسته نشون داده میشه

لینک به ارسال

من یک ابزارک رو طبق آموزش درست کردم با این خصوصیات : یه کوئری در خروجی ابزارک قرار دادم . این کوئری مطالب یک دسته رو فراخوانی میکنه . و در اخر هم در قسمت مدیریت ابزارک یک فیلد گذاشتم . کار این فیلد این هست که اگه ایدی دسته ای رو وارد کنی بره مقدار cat را در کوئری بگیره و در خروجی کوئری مطالب اون دسته رو نشون بده . این کدی که درست کردم چند تا مشکل داره . 1_ اگه ایدی دسته ای رو وارد کنی و ذخیره رو بزنی بعدش عدد محو میشه انگار ذخیره نمیشه . در خروجی هم فقط اخرین مطلب سایت نشون داده میشه .


class wp_parsi_newwidget extends WP_Widget {
function widget_tabn() {
$widget_ops = array( 'description' => 'Most Popular, Recent, Comments, Tags' );
$this->WP_Widget( 'widget_tabn',theme_name .'- تست تبت ', $widget_ops );
}

function widget( $args, $instance ) {





?>

<div class="widget-container">

<div class="widget-top">
<ul class="tabs posts-taps">
<li class="tabs"><a href="#tab1"><?php _e( 'یک دسته' , 'tie' ) ?></a></li>

</ul>
</div>

<div id="tab1" class="tabs-wrap">



<ul>


<?php

query_posts('cat='.$titlee);
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if ( dynamic_sidebar('example_widget_area_name') ) : else : endif; ?>
<table style="height:20px;border-bottom:1px solid #ccc;background:#dddddd;line-height:1.5em;">
<td style="width:440px;">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</td>
</table>
<?php
endwhile; endif;
wp_reset_query();
?>

</ul>



</div>

</div>

<?php
}

function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['posts_number'] = strip_tags( $new_instance['posts_number'] );
return $instance;
}




public function form( $instance ) {
if ( isset( $instance[ 'titlee' ] ) ) {
$title = $instance[ 'titlee' ];
}
else {
$title = __( 'New title', 'text_domain' );
}
?>


<p>
<label for="<?php echo $this->get_field_id( 'titlee' ); ?>"><?php _e( 'titlee:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'titlee' ); ?>" name="<?php echo $this->get_field_name( 'titlee' ); ?>" type="text" value="<?php echo esc_attr( $titlee ); ?>">
</p>



<?php
}
}

add_action( 'widgets_init', 'widget_tabn' );
function widget_tabn(){
register_widget( 'widget_tabn' );
}





ویرایش شده توسط ssll
لینک به ارسال

در اینجاکه فقط یک فیلد عنوان دارید فیلد دسته بندیتون کجاست؟

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


function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['posts_number'] = strip_tags( $new_instance['posts_number'] );
return $instance;
}

را به


function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['titlee'] = strip_tags( $new_instance['titlee'] );
return $instance;
}

تغییر دهید

لینک به ارسال

فیلدی که ایدی دسته در ان باید ذخیره شود همان فیلد titlee هست . تغییر دادم اما نشد . عددی که در فیلد میگذارم ذخیره میشود اما در خروجی مطلب اون دسته رو نشون نمیده فقط اخرین مطلب رو نشون میده . کوئری مشکلی ندارد ؟ فانکشن form و فانکشن update ایرادی ندارند؟

الان کد من به این شکل هست


class wp_parsi_newwidget extends WP_Widget {
function widget_tabn() {
$widget_ops = array( 'description' => 'Most Popular, Recent, Comments, Tags' );
$this->WP_Widget( 'widget_tabn',theme_name .'- تست تبت ', $widget_ops );
}

function widget( $args, $instance ) {





?>

<div class="widget-container">

<div class="widget-top">
<ul class="tabs posts-taps">
<li class="tabs"><a href="#tab1"><?php _e( 'یک دسته' , 'tie' ) ?></a></li>

</ul>
</div>

<div id="tab1" class="tabs-wrap">



<ul>


<?php
query_posts('cat=.$iman &showposts=10');
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if ( dynamic_sidebar('example_widget_area_name') ) : else : endif; ?>
<table style="height:20px;border-bottom:1px solid #ccc;background:#dddddd;line-height:1.5em;">
<td style="width:440px;">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</td>
</table>
<?php
endwhile; endif;
wp_reset_query();
?>

</ul>



</div>

</div>

<?php
}

function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['iman'] = strip_tags( $new_instance['iman'] );
return $instance;
}




public function form( $instance ) {
if ( isset( $instance[ 'iman' ] ) ) {
$iman = $instance[ 'iman' ];
}
else {
$iman = __( 'New iman', 'text_domain' );
}
?>


<p>
<label for="<?php echo $this->get_field_id( 'iman' ); ?>"><?php _e( 'id:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'iman' ); ?>" name="<?php echo $this->get_field_name( 'iman' ); ?>" type="text" value="<?php echo esc_attr( $iman ); ?>">
</p>



<?php
}
}

add_action( 'widgets_init', 'widget_tabn' );
function widget_tabn(){
register_widget( 'widget_tabn' );
}




ویرایش شده توسط ssll
لینک به ارسال

شما نام فیلد رو titlee قرار دادید

در کد پست 6 تغییر دهید و استفاده کنید در فرم

لینک به ارسال

اقا من تونستم اخرش اینو درست کنم . منتها میخوام بهش فیلد بیشتری بهش اضافه کنم . فیلد هم اضافه کردم اما گمان کنم فیلدهای درست شده اخیر باید با فانکشن ابدیت هم هماهنگ بشه ممنون میشم یه نگاهی بندازید . اقا یه کاری بکنید تایپیک اخرم باشه هم من خسته شدم هم شما رو دارم بیش از حد اذیت میکنم .


function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['iman'] = strip_tags( $new_instance['iman'] );
return $instance;
}


function form( $instance ) {
if ( isset( $instance[ 'iman' ] ) ) {
$iman = $instance[ 'iman' ];
}
else {
$iman = __( '1', 'text_domain' );
}
?>


<p>
<label for="<?php echo $this->get_field_id( 'iman' ); ?>"><?php _e( ' ایدی دسته مورد نظر برای پر بازدید:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'iman' ); ?>" name="<?php echo $this->get_field_name( 'iman' ); ?>" type="text" value="<?php echo esc_attr( $iman ); ?>">
</p>




<p>
<label for="<?php echo $this->get_field_id( 'parsa' ); ?>"><?php _e( ' ایدی دسته مورد نظر پر بحث ترین:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'parsa' ); ?>" name="<?php echo $this->get_field_name( 'parsa' ); ?>" type="text" value="<?php echo esc_attr( $iman ); ?>">
</p>




<p>
<label for="<?php echo $this->get_field_id( 'porteza' ); ?>"><?php _e( ' ایدی دسته مورد نظر تصادفی :' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'porteza' ); ?>" name="<?php echo $this->get_field_name( 'porteza' ); ?>" type="text" value="<?php echo esc_attr( $iman ); ?>">
</p>


<?php
}


ویرایش شده توسط ssll
لینک به ارسال

تفاوتی ندارد خط مربوط را تکرار کنید


$instance['iman'] = strip_tags( $new_instance['iman'] );
$instance['parsa'] = strip_tags( $new_instance['parsa'] );

لینک به ارسال

این فانکشن نباید تغییر کند؟


function form( $instance ) {
if ( isset( $instance[ 'iman' ] ) ) {
$iman = $instance[ 'iman' ];
}
else {
$iman = __( '1', 'text_domain' );
}
?>

لینک به ارسال

آموزش را کامل بخونید اطلاعات را اگر به جای خاصی غیر از ابزارک نمی خواهید ارسال یا ذخیره کنید نیازی به این شرط ندارید برای قرار دادن مقدار دیفالت و جایگزین نمودن مقدار جدید از تابع update استفاده کنید


function update( $new_instance, $old_instance ) {
$instance = $old_instance;
//Strip tags from title and name to remove HTML
$instance['title'] = strip_tags( $new_instance['title'] );
$instance['name1']= strip_tags( $new_instance['name1']);
$instance['name2']= strip_tags( $new_instance['name2']);
$instance['name3']= strip_tags( $new_instance['name3']);
$instance['ldate']= strip_tags( $new_instance['ldate']);
$instance['link1']= strip_tags( $new_instance['link1']);
return $instance;
}

و


function form( $instance ) {
//Set up some default widget settings.
$defaults = array(
'title' => 'قرعه کشی',
'name1' => 'نام اول' ,
'name2' => 'نام دوم' ,
'name3' => 'نام سوم' ,
'ldate' => '4 آذر 1392',
'link1' => 'http://example.com'
);
$instance = wp_parse_args( (array) $instance, $defaults ); ?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">عنوان</label>
<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" >
</p>
<p>
<label for="<?php echo $this->get_field_id( 'name1' ); ?>">نام اول</label>
<input id="<?php echo $this->get_field_id( 'name1' ); ?>" name="<?php echo $this->get_field_name( 'name1' ); ?>" value="<?php echo $instance['name1']; ?>" style="width:100%;">
</p>
<p>
<label for="<?php echo $this->get_field_id( 'name2' ); ?>">نام دوم</label>
<input id="<?php echo $this->get_field_id( 'name2' ); ?>" name="<?php echo $this->get_field_name( 'name2' ); ?>" value="<?php echo $instance['name2']; ?>" style="width:100%;">
</p>
<p>
<label for="<?php echo $this->get_field_id( 'name3' ); ?>">نام سوم</label>
<input id="<?php echo $this->get_field_id( 'name3' ); ?>" name="<?php echo $this->get_field_name( 'name3' ); ?>" value="<?php echo $instance['name3']; ?>" style="width:100%;">
</p>
<p>
<label for="<?php echo $this->get_field_id( 'ldate' ); ?>">زمان برگزاری دوره بعد </label>
<input id="<?php echo $this->get_field_id( 'ldate' ); ?>" name="<?php echo $this->get_field_name( 'ldate' ); ?>" value="<?php echo $instance['ldate']; ?>" style="width:100%;">
</p>
<p>
<label for="<?php echo $this->get_field_id( 'link1' ); ?>">نشانی لینک </label>
<input id="<?php echo $this->get_field_id( 'link1' ); ?>" name="<?php echo $this->get_field_name( 'link1' ); ?>" value="<?php echo $instance['link1']; ?>" style="width:100%;">
</p>
<?php
}

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

لینک به ارسال

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

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

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

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

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

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

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

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

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