رفتن به مطلب

عدم تغییر و ذخیره شدن محتویات متاباکس در وردپرس


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

سلام دوستان عزیز..

از یه قالب استفاده میکنم که تو مطالب و قسمت های دیگه از متاباکس استفاده میکنه. ولی بخش متاباکس رو وقتی تغییر میدم تغییر نمیکنه و ذخیره نمیشن. مثلا اگه خالی باشی همونطوری باقی میمونه و بعد از بروزرسانی مطلب مقداری که به پست متا دادم ذخیره نمیشه و همچنان خالی باقی می مونه.

دلیل این اتفاق چیه؟

ممنون میشم  از راهنماییتون

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

سلام .

امکان داره $post-id مقدار نداشته باشه .

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

لینک به ارسال
در 3 ساعت قبل، Mirrajabi گفته است :

سلام .

امکان داره $post-id مقدار نداشته باشه .

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

ممنونم.

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

یه چیزی پیدا کردم نمیدونم همین بخشه یا نه.

<?php
public static function meta( $post_id, $saved, $field )
	{
		$meta = get_post_meta( $post_id, $field['id'], true ); // Always save as single value

		// Use $field['std'] only when the meta box hasn't been saved (i.e. the first time we run)
		$meta = ! $saved && '' === $meta ? $field['std'] : $meta;

		// Make sure returned value is an array
		if ( empty( $meta ) )
			$meta = array();

		// If cloneable, make sure each sub-value is an array
		if ( $field['clone'] )
		{
			// Make sure there's at least 1 sub-value
			if ( empty( $meta ) )
				$meta[0] = array();

			foreach ( $meta as $k => $v )
			{
				$meta[$k] = (array) $v;
			}
		}

		return $meta;
	}

	/**
	 * Change child field name to form parent[child]
	 *
	 * @param string $parent Parent field's name
	 * @param string $child  Child field's name
	 * @return string
	 */
	public static function child_field_name( $parent, $child )
	{
		$pos  = strpos( $child, '[' );
		$pos  = false === $pos ? strlen( $child ) : $pos;
		$name = $parent . '[' . substr( $child, 0, $pos ) . ']' . substr( $child, $pos );

		return $name;
	}

	/**
	 * Set value of meta before saving into database
	 *
	 * @param mixed $new
	 * @param mixed $old
	 * @param int   $post_id
	 * @param array $field
	 *
	 * @return int
	 */
	public static function value( $new, $old, $post_id, $field )
	{
		$sanitized = array();
		foreach ( $new as $key => $value )
		{
			if ( is_array( $value ) && ! empty( $value ) )
			{
				$value = self::value( $value, '', '', '' );
			}
			if ( '' !== $value && array() !== $value )
			{
				if ( is_int( $key ) )
				{
					$sanitized[] = $value;
				}
				else
				{
					$sanitized[$key] = $value;
				}
			}
		}
		return $sanitized;
	}

	/**
	 * Normalize group fields.
	 * @param array $field
	 * @return array
	 */
	public static function normalize( $field )
	{
		$field           = parent::normalize( $field );
		$field['fields'] = RW_Meta_Box::normalize_fields( $field['fields'] );
		return $field;
	}
}

 

لینک به ارسال

اینجا نیست .

معمولا تو فانکشن . و نوشته update_post_meta .باید ببنید اول مقدار ذخیره میشه یا نه .

لینک به ارسال
  • 2 هفته بعد...

برای ایجاد یک متاباکس از تابع add_metabox استفاده میشه و برای ذخیره متاباکس باید یک هوک به save_post بزنین

ایجاد متاباکس کدی مشابه زیر هست

add_action( 'add_meta_boxes', 'add_post_meta_boxes' );

function add_post_meta_boxes() {

  add_meta_box(
    'wp_parsi-post-class',      // Unique ID
    'Post Class',    // Title
    'wp_parsi_post_meta_box',   // Callback function
    'post',         // Admin page (or post type)
    'side',         // Context
    'default'         // Priority
  );
}

function wp_parsi_post_meta_box( $post ) { ?>
  <p>
    <label>Add a custom CSS class, which will be applied to WordPress' post class.</label>
    <br />
    <input type="text" name="parsi-post-class" value="<?php echo esc_attr( get_post_meta( $post->ID, 'parsi_post_class', true ) ); ?>" />
  </p>
<?php }

 برای ذخیره متاباکس

add_action( 'save_post', 'parsi_save_post_meta', 10, 2 );

function smashing_save_post_class_meta( $post_id, $post ) {

  /* Verify the nonce before proceeding. */
  if ( !isset( $_POST['parsi-post-class'] ))
    return $post_id;

	update_post_meta( $post_id, 'parsi_post_class', $_POST['parsi-post-class'] );
}

 

لینک به ارسال

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

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

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

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

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

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

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

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

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