Nefunguje ukládání metaboxu

Úvodní stránka Fórum podpory WordPressu Problémy s WordPressem Nefunguje ukládání metaboxu

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.

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)
  • Autor
    Příspěvky
  • #5812

    sjiamnocna
    Participant
    Web

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

    #17014

    admin
    Keymaster
    Web

    Jak řešíte ukládání? Akcí save_post? Kde je definována hodnota $songbook_postid?

    #17015

    sjiamnocna
    Participant
    Web

    Má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.

    #17016

    sjiamnocna
    Participant
    Web

    Máte někdo nějaký nápad?

    #17017

    admin
    Keymaster
    Web

    Ná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ží).

    #17018

    sjiamnocna
    Participant
    Web

    Omlouvá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…

    #17019

    admin
    Keymaster
    Web

    Kde 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čí?

    #17020

    sjiamnocna
    Participant
    Web

    Samozř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 :)

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti