mohsen29

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

20 پست در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

سلام.

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

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

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

با تشکر



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

ویرایش شده در توسط Arash28
0

به اشتراک گذاری این پست


لینک به پست

دوستان راهنمایی می کنید

0

به اشتراک گذاری این پست


لینک به پست

تابعش


unregister_setting

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

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

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

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

2

به اشتراک گذاری این پست


لینک به پست

با تشکر از راهنمایی شما . منظور از 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

0

به اشتراک گذاری این پست


لینک به پست

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

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


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

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

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

1

به اشتراک گذاری این پست


لینک به پست

ممنون از شما.

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


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

0

به اشتراک گذاری این پست


لینک به پست

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


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

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

مقداری که


$set['id'];

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

بفرمایید این


$set['id'];

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

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

یک تابع نوشتم برای 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
0

به اشتراک گذاری این پست


لینک به پست

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

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

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

در هر حال پس


<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 );

1

به اشتراک گذاری این پست


لینک به پست

مشکل حل شد.

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


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

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

0

به اشتراک گذاری این پست


لینک به پست

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

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

0

به اشتراک گذاری این پست


لینک به پست

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


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

0

به اشتراک گذاری این پست


لینک به پست

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

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


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

}

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

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

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

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

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

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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


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
0

به اشتراک گذاری این پست


لینک به پست

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

1

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

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

ویرایش شده در توسط Arash28
0

به اشتراک گذاری این پست


لینک به پست

من اون آموزش رو نمی دونم چیه وقت خوندنش رو هم ندارم شما می تونید یک آپشن بسازید مثلا به نام 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'];?>">

الی آخر

1

به اشتراک گذاری این پست


لینک به پست

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

چطور می تونم به صورت آجاکس تنظیمات رو ذخیره کنم در این مورد راهنمایی می کنید؟

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری