मेरे पास पहले से पोस्ट किए गए तीन समाधानों के बारे में कोड टिप्पणियां हैं, लेकिन एक सामान्य टिप्पणी भी है
वे एक उप-प्रस्तुतियाँ पसंद पेश करते हैं: या तो उपयोगकर्ता के स्क्रीन विकल्प चेकबॉक्स पसंद को ओवरराइड करें; या इसका सम्मान करें लेकिन क्या आपके कोड को अनदेखा कर दिया गया है यदि उपयोगकर्ता ने कभी चेकबॉक्स को बदल दिया है, यहां तक कि अन्य मेटा_बॉक्स के लिए, या इससे पहले कि आपका कोड WP में था। लगता है कि सम्मानजनक विकल्प केवल तभी उपयोगी है जब आपके सभी उपयोगकर्ता नए हों। सबसे अच्छा समाधान यह निर्धारित करने के लिए एक कस्टम उपयोगकर्ता विकल्प निर्धारित करना होगा कि क्या आपके विशिष्ट मेटा_बॉक्स डिफॉल्ट को उपयोगकर्ता द्वारा बदल दिया गया है, और इसका सम्मान करें। नहीं, मैंने वह कोड नहीं लिखा है! आसान होना चाहिए ... :)
तीन समाधान पोस्ट किए गए:
1. WraithKenny का hidden_meta_boxes
समाधान वह है जो user_option को ओवरराइड करता है। ध्यान दें कि इसमें सभी पोस्ट प्रकार ('पोस्ट', 'पेज', 'लिंक', 'अटैचमेंट' और किसी भी कस्टम पोस्ट प्रकार) शामिल हैं। यह तब तक ठीक है जब तक आप इसे विशिष्ट नहीं बनाना चाहते। आपने अपनी add_meta_box()
कॉल में post_type निर्दिष्ट किया है । आप उन से मिलान करने का प्रयास कर सकते हैं, या बस इसे पंख लगा सकते हैं क्योंकि जो मेल नहीं खाते हैं उन्हें अनदेखा किया जाएगा। यदि आप फ़िल्टर में post_type जानना चाहते हैं, तो आप अतिरिक्त screen
पैरामीटर का उपयोग कर सकते हैं :
add_filter('hidden_meta_boxes', 'foo_hidden_meta_boxes', 10, 2);
function foo_hidden_meta_boxes($hidden, $screen) {
$post_type= $screen->id;
switch ($post_type) {
// case 'post', 'page', 'link', 'attachment', and any custom post types
// $hidden[]= 'foo_box_id';
// /or/
// $hidden= array_diff($hidden, array('foo_box_id'));
}
return $hidden;
}
2. जैसा कि रर्स्ट कहते हैं, default_hidden_meta_boxes
user_option का सम्मान करता है। जैसा कि hidden_meta_boxes
, आप post_types को अलग करने के लिए $ स्क्रीन पैरामीटर का उपयोग कर सकते हैं।
3. Drebabels का set_user_metaboxes () फ़ंक्शन भी user_option का सम्मान करता है। ध्यान दें कि यह 'पोस्ट' एडिट स्क्रीन के लिए हार्ड-कोडेड है। 'पेज' एडिट स्क्रीन, और अन्य पोस्ट_टाइप्स को संभालने के लिए, कोड को इस लूप में लपेटें:
function set_user_metaboxes($user_id=NULL) {
$post_types= array( 'post', 'page', 'link', 'attachment' );
// add any custom post types here:
// $post_types[]= 'my_custom_post_type';
foreach ($post_types as $post_type) {
// These are the metakeys we will need to update
$meta_key= array(
'order' => "meta-box-order_$post_type",
'hidden' => "metaboxhidden_$post_type",
);
// The rest is the same as drebabels's code,
// with '*_user_meta()' changed to '*_user_option()'
// So this can be used without hooking into user_register
if ( ! $user_id)
$user_id = get_current_user_id();
// Set the default order if it has not been set yet
if ( ! get_user_option( $meta_key['order'], $user_id ) ) {
$meta_value = array(
'side' => 'submitdiv,formatdiv,categorydiv,postimagediv',
'normal' => 'postexcerpt,tagsdiv-post_tag,postcustom,commentstatusdiv,commentsdiv,trackbacksdiv,slugdiv,authordiv,revisionsdiv',
'advanced' => '',
);
update_user_option( $user_id, $meta_key['order'], $meta_value, true );
}
// Set the default hiddens if it has not been set yet
if ( ! get_user_option( $meta_key['hidden'], $user_id ) ) {
$meta_value = array('postcustom','trackbacksdiv','commentstatusdiv','commentsdiv','slugdiv','authordiv','revisionsdiv');
update_user_option( $user_id, $meta_key['hidden'], $meta_value, true );
}
}
}
हाँ, get_user_meta
होना चाहिए get_user_option
। एकल-साइट के लिए यह कोई मायने नहीं रखता है, और बहु-साइट के लिए भी यह संभव नहीं है। Wp-admin देखें / शामिल करें / ajax-actions.php क्यों: update_user_option
के लिए 'सही' वैश्विक पैरामीटर है।