رفتن به مطلب

مشکل در ساخت ویجت در پوسته


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

سلام.

یک ویجت صفر رو در نظر بگیرید.

توی function form یه input گذاشتم. با الگو گرفتن از طرز title input .

حالا تو پنل ابزارک ها، توی این input هرچی میزارم و ذخیره میکنم، سیو نمیشه و میپره.

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

لینک به ارسال

براش کلاس هم تعریف کردید؟


class My_Widget extends WP_Widget {
public function __construct() {
// widget actual processes
}
public function widget( $args, $instance ) {
// outputs the content of the widget
}
public function form( $instance ) {
// outputs the options form on admin
}
public function update( $new_instance, $old_instance ) {
// processes widget options to be saved
}
}

نمونه معرفی شده در وردپرس


class Foo_Widget extends WP_Widget {
/**
* Register widget with WordPress.
*/
function __construct() {
parent::__construct(
'foo_widget', // Base ID
'Foo_Widget', // Name
array( 'description' => __( 'A Foo Widget', 'text_domain' ), ) // Args
);
}
/**
* Front-end display of widget.
*
* @see WP_Widget::widget()
*
* @param array $args Widget arguments.
* @param array $instance Saved values from database.
*/
public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] );
echo $args['before_widget'];
if ( ! empty( $title ) )
echo $args['before_title'] . $title . $args['after_title'];
echo __( 'Hello, World!', 'text_domain' );
echo $args['after_widget'];
}
/**
* 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_name( '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;
}
} // class Foo_Widget

لینک به ارسال

بله از همون کلاس خود codex.wordpress.org استفاده کردم و همون مثال رو کمی تغییر دادم.

الان با توجه به input تایتل، یه input دیگه میزارم. اما بعد از زدن دکمه ذخیره در پنل ابزارک های وردپرس، چیزی توش نمیمونه

----------

فکر کنم توی تعیین آرایه های قبل از ایجاد input ها مشکل دارم.

ممکنه این قسمت رو توضیح بدین؟

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

این قسمت را برای فیلد جدید تکرار کردید ؟


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

لینک به ارسال

الان کل بخش form به این شکل دراومده:


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_name( '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>

<p>
<label for="<?php echo $this->get_field_id('banner_url'); ?>">آدرس بنر</label>
<input class="widefat" id="<?php echo $this->get_field_id('banner_url'); ?>" name="<?php echo $this->get_field_name('banner_url'); ?>" value="<?php echo $instance['banner_url']; ?>" />
</p>
<?php
}

لینک به ارسال

این رو هم دارید؟


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'] );
return $instance;
}

لینک به ارسال

با اضافه کردن کد توی بخش update مشکل ذخیره نشدن حل شد.

آقا ایمان خیلی خیلی ممنون :)

مشکل تایتل نبود، بخش های دیگه ای بود که خودم اضافه میکردم. که با این یاداوری متوجه اشتباه کار شدم ^_^

لینک به ارسال

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

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

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

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

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

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

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

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

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