Yanıtlar:
Bunu tavsiye ederim.
Verilerin kökenini ve kullanıcının amacını kontrol etmek için kendinize ait bir fikriniz var (ve öyle). Bir metabox için yalnızca bir nonce'niz varsa - o metabox kaldırılırsa (gizli ile aynı değildir) sorunla karşılaşırsınız. Kaldırılırsa, ikinci meta kutu, nonce daha uzun süre gönderildiği için asla kaydedilmez (veya en azından kaydetmelidir).
Elbette güvenlik açısından, ikinci bir nonce tarafından hiçbir şey eklenmez - diğerini değil, yalnızca bir meta kutusunu güncellemek istemezseniz: nonces , eyleme özgü olmalıdır .
Belirtildiği gibi yazı düzenleme ekranı için yalnızca bir form vardır. Bu nedenle, teoride, verilerin eylemini ve kökenini doğrulamak için sadece bir nonce alanına ihtiyacınız vardır. Bununla birlikte, meta kutular kaldırılabildiğinden - yalnızca bir meta kutuda nonce alanı bulunarak nonce'nin orada olacağının garantisi yoktur. Her meta kutuya bir nonce alanı yerleştirerek, herhangi bir veri işlemeden önce bu meta kutudan verilerin gönderilip gönderilmediğini (ve aslında bulunduğunu düşündüğünüz yerden) kontrol edebilirsiniz. Örneğin:
save_post_call_back($post_id){
//Check this is not an auto-save route
if(nonce of metabox1 present and valid){
//Process data from metabox1
}else{
//Either metabox removed - or invalid nonce. Take no action.
}
if(nonce of metabox2 present and valid){
//Process data from metabox2
}else{
//Either metabox removed - or invalid nonce. Take no action.
}
}
Adı nonce alanının METABOX özgü olması (ve diğer eklentileri ile ilgili formu ile mevcut olan diğer herhangi bir Nonce'lar çatışmayan) gerekir.
Nonce değeri eyleme özgü olmalıdır (ve bu genellikle verilerin kökenini içermelidir (örn. Hızlı düzenlemenin aksine edit-post)). Genellikle posta kimliğini de eklerim.
save_post
eylemi tetiklediğinden ).
save_post
çeşitli bağlamlardan çağrılabilir, bu nedenle bir nonce garanti edilmez. Ayrıca geri arama aslında bir şey yapmak zorunda kontrol etmenin uygun bir yoludur. Birden fazla nosyon eklerken benzersiz isimler kullanın. Çalışıyor.
Ayrıca, nonce alanını ekleyerek asla kaybolmayan gönderme kutusunu da kancalayabilirsiniz.
add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}
Ardından, save_post eyleminizde:
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;
Nonce alanı, formun içeriğinin başka bir yerde değil, geçerli sitedeki konumdan geldiğini doğrulamak için kullanılır.
form başına yalnızca bir nonce alanı gereklidir, benim için anlamsız olandan daha fazlasını kullanın.
isteğinizin bir yönetici sayfasından geldiğinden emin olmak için check_admin_referer () yöntemini araştırabilir ve kullanabilirsiniz.
WP 3.5.2'de tüm düzenleme sayfası bir form etiketine sarılmıştır, bu yüzden kendi form etiketlerinizi eklememelisiniz !! Hala bunu yapar ve başka bir ayrı özel meta kutusu eklemeye çalışırsanız, kaydederken başarısız olur ve kaydetmeye çalışırken sadece wp-admin home'a yönlendirirsiniz !!
Ayrıca, form başına yalnızca bir olması gerekiyordu (bu da başarısız olabilir !!) Ve sayfa düzenleme zaten bir nonce alanı var!
1) tüm düzenleme ekranı için doğru yanıt yazarının kabul ettiği gibi sadece bir Form etiketi olduğundan ve 2) otomatik olarak buna bir nonce eklenir. Neden daha fazlasını eklemelisin? Ne olursa olsun her zaman nonce olacaktır ...
Niyet düzenlemeye Bence içerik veya meta veri ile sayfası ör. bir nonce alanı ... Ayrıca daha fazla eklemeye çalıştığımda bile birden fazla meta-kutuları ile çalışmaz !! Biri işe yarayacak ve diğeri başarısız olacak ve kullanıcıyı sadece wp-admin home'a yönlendirecek!
<form>
yönetici sayfasında yalnızca bir etiket var. nonce alanı forma özgü olmalı ya da olmamalı mı? tia, @Stephen