رفتن به مطلب

پاک کردن مقادیر register_setting


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

سلام.

در حال نوشتن پنل تنظیماتی هستم با register_setting آپشن رو ساختم و مقادیر به خوبی در فرم ساخته شده ذخیره می شن.

می خوام یک بخش ریست و پاک کردن کل تنظیمات رو بسازیم چه تابعی نیاز داره؟؟؟ با delete_option باید انجام بشه ؟؟ چون از update_option استفاده نشده.

و یک مورد دیگه اینکه توایع زیر کاربرد اصلیشون چیه و استفاده نکردن ازشون مشکلی پیش میاره؟؟

با تشکر



. esc_html( ) .
esc_attr ().
esc_html
و...

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

تابعش


unregister_setting

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

esc_html یعنی در نظر نگرفتن تگهای html (خروجی text only)

esc_attr یعنی حذف موارد مزام در attr مانند " یا ' و همینطور تگهای html

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

لینک به ارسال

با تشکر از راهنمایی شما . منظور از 3 نقطه توابع مشابه مثل موارد زیر بود :


esc_url
esc_textarea

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

من به این صورت طبق آموزش ها انجام دادم :


case "u":
?>
<input id="<?php echo $set['id']; ?>" class="img-path" type="text" name="mysetting[<?php echo $set['id']; ?>]" value="<?php echo $val ?>" />
<a id="upload_<?php echo $set['id']; ?>_button" class="button upimg" >آپلود</a>
<div id="<?php echo $set['id']; ?>-preview" class="img-preview" >
<img src="<?php echo $set['id']?>">
</div>
<script type='text/javascript'>
set_uploader( '<?php echo $set['id']; ?>' );
</script>
<?php
break;


function set_uploader(field ) {
var _bg_uploader;
jQuery(document).on("click", "#upload_"+field+"_button" , function( event ){
event.preventDefault();
_bg_uploader = wp.media.frames._bg_uploader = wp.media({
title: 'عکس ها',
library: {type: 'image'},
button: {text: 'انتخاب'},
multiple: false
});
_bg_uploader.on( 'select', function() {
var selection = _bg_uploader.state().get('selection');
selection.map( function( attachment ) {
attachment = attachment.toJSON();
jQuery('#'+field).val(attachment.url);
jQuery('#'+field+'-preview').slideDown(800);
jQuery('#'+field+'-preview img').attr("src", attachment.url );
});
});

_bg_uploader.open();

});
}

و یک مورد دیگه اینکه من تابع settings_fields که طبق آموزش ها گفته شده بعد از form گذاشته بشه رو قرار دادم و موارد زیر رو خودکار اضافه کرده آیا امنیت فرم با این تابع برقرار می شه یا باید توابع nonce براش بسازم؟؟

post-6470-0-62010200-1448301743_thumb.pn

لینک به ارسال

فکر نکنم اون دو مورد دیگه نیاز به تعریف داشته باشند

خط img کدتون رو به این صورت تغییر بدید که ارور برنگردونه


if(!empty($set['id']))
$src = $set['id'];
else
$src = bloginfo('template_directory').'/images/default.png';
echo '<img id=" src="'.$src.'">';

برای پیش نمایش هم که کدش رو دارید دیگه

تابع nonce نباید بسازید اون فیلدها درستند و مشکلی ندارند

لینک به ارسال

ممنون از شما.

پیشنمایش کار نمی کنه و بلافاصله نشون نمی ده فکر کنم باید تو case تعریف شده تو کد زیر یک مورد اضافه بشه :


<script type='text/javascript'>
set_uploader( '<?php echo $set['id']; ?>' );
</script>

لینک به ارسال

اینکه چرا آی دی ها را با


<?php echo $set['id'];?>

ساختید و چرا نشانی تصویر رو هم همین مقدار گذاشتید رو من نمی دونم قاعدتا خودتون توجیهش رو می دونید

مقداری که


$set['id'];

برمی گردونه اگر نشانی تصویر باشه که روش کد نویسیتون کلا اشتباهه و نباید نشانی تصویر را به عنوان آی دی عناصر قرار بدید

بفرمایید این


$set['id'];

چیه و چرا تو کدتون هست و چی رو بر می گردونه تا عرض کنم

لینک به ارسال

یک تابع نوشتم برای switch case ها به این صورت :


function add_my_field( $set ){
//**
$my_option = get_option("my_options")
if(!empty($my_option)){
$val = $my_option;
}
//**
case "u":
?>
<input id="<?php echo $set['id']; ?>" class="img-path" type="text" name="mysetting[<?php echo $set['id']; ?>]" value="<?php echo $val ?>" />
<a id="upload_<?php echo $set['id']; ?>_button" class="button upimg" >آپلود</a>
<div id="<?php echo $set['id']; ?>-preview" class="img-preview" >
<img src="<?php echo $val;?>">
</div>
<script type='text/javascript'>
set_uploader( '<?php echo $set['id']; ?>' );
</script>
<?php
break;
}

و به این صورت هم آپشن ها رو در پنل تنظیمات تعریف می کنم :


add_my_field = (array(
"name" => "آپلود",
"id" => "ads_img",
"type" => "u",
));

$val در دستور اول تعریف شده که آپشن رو برگدونه و $set هم id آپشن رو بر می گردونه

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

آی دی آپشن رو بر می گردونه؟

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

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

در هر حال پس


<img src="<?php echo $set['id']?>">

باید بشه


<img src="<?php echo $val;?>">

و شروع کننده آی دی عناصر هم باید حروف لاتین باشه یعنی


id="div-<?php echo $set['id']; ?>-preview"

دقت کنید این دو خط هم تغییر می کنند


jQuery('#'+field+'-preview').slideDown(800);
jQuery('#'+field+'-preview img').attr("src", attachment.url );

لینک به ارسال

مشکل حل شد.

منظور از set['id] همون id هست که در کد زیر به کار رفته . مگه آی دی آپشن نمیشه؟ ( "id" => "ads_img" )


add_my_field = (array(
"name" => "آپلود",
"id" => "ads_img",
"type" => "u",
));

و یک مورد دیگه همون ریست کردن هست چطوری می تونم به جای اینکه به تک تک فیلدها یک مقدار دیفالت بدم یه مورد کلی در نظر بگیرم و وقتی هم ریست خواستم بکنم همون رو در نظر بگیره؟؟

لینک به ارسال

مگه مجموعا چند تا فیلد دارید؟ به نظر خودتون مقدار گذاری فیلدهاتون وقت گیر تره یا پاسخ دادن به سئوالاتون

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

لینک به ارسال

فیلدها متغیر هستند شاید 10 تا شاید 20 تا بخوام استفاده کنم به خاطر همین باید چه دستوری به کار بره که خودکار آی دی ها رو بفهمه و یک مقدار خالی جایگزینش کنه : مثلا به صورت زیر بخوام بنویسم نمی دونم باید چیکار کنم :


if ( isset( $_POST['reset'] ) ) {
return get_default_values();
}
function get_default_values() {
؟؟؟
}

لینک به ارسال

پنل تنظیمات رو اینجوری نباید بسازید

مسیر کارتون اشتباهه پنل تنظیمات یک قالب که نمی شه فیلدهاش متغیر باشه ممکنه برای یک قالب ده تا باشه برای یک قالب بیست تا خوب پنل دو تا قالب را باید جداگانه بنویسید

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

لینک به ارسال

مثلا همون آپلود عکس که فیلدش رو ساختم مثلا بیام به صورت زیر id رو مقدارش رو خالی بذارم :


if ( isset( $_POST['reset'] ) ) {
$def = array(
"ads_img" => "";
"logo_img" => "";
);
باید چه تابعی به کار ببرم که مقدار خالی بعد از کلیک در دکمه ی ریست جایگزین مقادیر قبلی بشه؟؟

}

باید از add_filter استفاده بشه؟؟

پنل تنظیمات با update_option و delete_option راحت تره انگار تا با register_setting

لینک به ارسال

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

اگر هدفتون ساختن یک پنل تنظیمات حرفه ایه:

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

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

بعد هم بهتره اول کل کار را یکبار بصورت html بسازید و فرمتون رو به صورت عادی چک کنید و مطئن بشید تمام مقادیر رو درست ارسال می کنه بعد در نهایت فرم ساخته شده رو می تونید با ریجستری ستینگ یا اد آپشن به بخش مدیریت وردپرس متصل کنید

لینک به ارسال

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


http://code.tutsplus.com/articles/how-to-create-a-better-wordpress-options-panel--net-9360

توی این آموزش هر آپشن در صفحه ی test.com/wp-admin/options.php با اسم و آیدی مخصوص خودش ساخته و ذخیره میشه اما با اون register_setting طبق تصویر زیر serialized ذخیر میشه :

این مورد به خاطر امنیت هست؟؟ آموزش بالا رو میشه به این صورت درآورد ؟

post-6470-0-55579900-1448547528_thumb.pn

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

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

لینک به ارسال

تو همون آموزش بالا هر آپشن جداگانه با آی دی ها مخصوصشون ذخیره میشن چطور میشه همه رو مثل register_setting در یک نام معین شده ریخت و ذخیره کرد تا تعداد option_name ها در جدول wp_option کم باشه؟

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

من اون آموزش رو نمی دونم چیه وقت خوندنش رو هم ندارم شما می تونید یک آپشن بسازید مثلا به نام my_themes_options


<?php
$options = get_option('my_themes_options');
?>
<input id="logo" name="my_themes_options[logo]" value="<?php echo $options['logo'];?>">
<input id="background-color" name="my_themes_options[bgc]" value="<?php echo $options['bgc'];?>">

الی آخر

لینک به ارسال

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

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

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

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

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

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

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

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

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