Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Nefunguje ukládání metaboxu
Štítky: metabox, post editor, saving metabox
Zvolené téma obsahuje celkem 7 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel sjiamnocna a poslední změna je stará 10 let, 4 měsíce.
-
AutorPříspěvky
-
17. prosince 2013 (19:41) #5812
Ahoj. Dělám plugin a dostal jsem se k přidávání metaboxu. Chvíli to vše v pořádku ukládalo, a ve chvíli následující už ne. Nevím co jsem udělal špatně, protože jsem nic tak drastického nedělal. Mám v pluginu dva metaboxy, z nich se neuloží ani jeden. Kód:
Zavedení metaboxu:
add_meta_box('songbook_songinfo',__('Another song properties','wpsongbook'),'songbook_metabox_aditionals','song','side','default');
Obsah:
global $post;
$songbook_forms_set_values['songbook_tempo_meta']=(get_post_meta($post->ID,'songbook_tempo_meta',true))?get_post_meta($post->ID,'songbook_tempo_meta',true):'85';
$songbook_forms_set_values['songbook_video_link']=get_post_meta($post->ID,'songbook_video_link',true);
echo'<div class="songbook_aditional_meta">
<input type="hidden" name="songbook_aditionals_noncename" id="songbook_noncename" value="'.wp_create_nonce(plugin_basename(__FILE__) ).'"/>
<label for="songbook_tempo_meta">'.__('Song tempo (BPM):','wpsongbook').'</label>
<input type="number" value="85" name="songbook_tempo_meta" id="songbook_tempo_meta"/><br/>'.
'<label for="songbook_video_link">'.__('Video link:','wpsongbook').'</label>
<input type="text" id="songbook_video_link" name="songbook_video_link"/>
</div>'ukládání:
if(!wp_verify_nonce($_POST['songbook_aditionals_noncename'],plugin_basename(__FILE__))||!current_user_can('edit_post'))return;
if(defined('DOING_AUTOSAVE')&&DOING_AUTOSAVE)return;
$songbook_mbox_resulttosave['songbook_tempo_meta']=$_POST['songbook_tempo_meta'];
$songbook_mbox_resulttosave['songbook_video_link']=$_POST['songbook_video_link'];
if($songbook_mbox_resulttosave['songbook_tempo_meta'])update_post_meta($songbook_postid,'songbook_tempo_meta',$songbook_mbox_resulttosave['songbook_tempo_meta']);
if($songbook_mbox_resulttosave['songbook_video_link'])update_post_meta($songbook_postid,'songbook_video_link',$songbook_mbox_resulttosave['songbook_video_link']);17. prosince 2013 (22:03) #1701418. prosince 2013 (6:04) #17015Mám tam add_action(‘save_post’…) Pochopil jsem to tak, že jako parametr se automaticky vkládá ID příspěvku (to je $songbook_postid). Pokud tomu tak není, zjistili jsme, kde je chyba. Ale toto používám už od začátku metaboxu a chvíli zpět to fungovalo :( Bohužel nevím, co jsem provedl, protože jsem mezitím mnohokrát otevřel editor.
18. prosince 2013 (15:07) #17016Máte někdo nějaký nápad?
18. prosince 2013 (20:38) #17017Nápadů by bylo vcelku dost, ale ten kód není kompletní, aby se dal vyzkoušet. Nechte si zobrazovat, co a kam ukládáte (a zda se to opravdu uloží).
19. prosince 2013 (11:19) #17018Omlouvám se, jsem poslední dobou zaměstnán studiem…
add_action('add_meta_boxes','songbook_add_metabox_linkfile');
add_action('save_post','songbook_save_filemetabox');
add_action('admin_enqueue_scripts','songbook_enqueue_admin_scr');function songbook_add_metabox_linkfile(){
add_meta_box('songbook_files',__('Link files','wpsongbook'),'songbook_metabox_files','song','side','default');
}
function songbook_metabox_files(){
global $post;
echo'<div class="uploader">
<input class="button" id="addfile_button" value="'.__('Add files','wpsongbook').'" />
</div>';
echo'<div id="obal">';
echo'<input type="hidden" name="songbook_filebox_noncename" id="songbook_noncename" value="'.wp_create_nonce(plugin_basename(__FILE__)).'"/>';
$songbook_value=get_post_meta($post->ID,'songbook_filebox',true);
$songbook_metaboxcontent=explode(',',$songbook_value);
if(!empty($songbook_value)){
foreach($songbook_metaboxcontent as $songbook_metaboxonefile){
$songbook_removelink=(current_user_can('edit_post'))?'<a class="removeele" onclick="removefile('post_'.$songbook_metaboxonefile.'');">X</a>':'$nbsp;$nbsp;';
echo'<p class="onefile" id="post_'.$songbook_metaboxonefile.'"><input type="hidden" name="songbook_attachedfiles[]" value="'.$songbook_metaboxonefile.'">'.$songbook_removelink.' <a href="'.wp_get_attachment_url($songbook_metaboxonefile).'" target="_blank">'.basename(get_attached_file($songbook_metaboxonefile)).'</a></p>';
}
}else{
echo'<p class="filemetabox_warn">'.__('No files found attached to this post. You should add anything first. You can choose more files when you hold CTRL','wpsongbook').'</p>';
}
echo'</div>';
}function songbook_save_filemetabox($songbook_postid){
if(!wp_verify_nonce($_POST['songbook_aditionals_noncename'],plugin_basename(__FILE__))||!current_user_can('edit_post'))return$songbook_postid;
if(defined('DOING_AUTOSAVE')&&DOING_AUTOSAVE)return$songbook_postid;
$songbook_savevalue=implode(',',$_POST['songbook_attachedfiles']);
if($songbook_savevalue)update_post_meta($songbook_postid,'songbook_filebox',$songbook_savevalue);
}pro přidání skriptu a stylu:
function songbook_enqueue_admin_scr(){
wp_enqueue_media();
wp_enqueue_style('mediaman_style',plugins_url().'/wp-songbook/css/mediastyle.css');
wp_enqueue_script('mediaman_script',plugins_url().'/wp-songbook/js/mediascript.js');
$songbook_filescript_translation=array(
'unlink_confirm'=>__('Really unlink from song?','wpsongbook'),
'choosefiles'=>__('Choose files to link','wpsongbook'),
'selectfiles_butt'=>__('Link files','wpsongbook')
);
wp_localize_script('some_handle','songbook_filelink_translation',$songbook_filescript_translation);
}Ten první jsem zprovoznil tím, že jsem return doplnil o $songbook_postid, ale druhý stále nefunguje…
19. prosince 2013 (17:45) #17019Kde je definováno
songbook_aditionals_noncename
? Při ukládání to sice testujete, ale nikde ho tam jinde nevidím, takže to tam pokaždé skončí?19. prosince 2013 (18:09) #17020Samozřejmě to opět byla kravina… Zapomněl jsem, že soubory do pole vypisuje Javascript a zcela jsem přehlídl, že gereruje pole s jiným “name”, než jsem zpracovával při ukládání.
Díky adminovi jsem si to uvědomil. Děkuji :)
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.