2017-09-20 48 views
0

在我試圖找出當前問題的解決方案時,我的頭撞牆。簡而言之,我創建了一個'page-home.php'模板頁面,可以獲取一個元框以調用頁面模板,但嘗試使用元框中的數據更新頁面會使數據消失。下面不保存數據的頁面模板的自定義元框

代碼:

function page_add_meta_boxes($post) { 
    global $post; 

    if(!empty($post)) 
    // get the page template post meta 
    $page_template = get_post_meta($post->ID, '_wp_page_template', true); 
    // if the current page uses our specific template, then output our custom metabox 
    { 
     $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true); 
     // looks for page-home.php file to add our meta box 
     if($pageTemplate == 'page-home.php') 
     { 
      add_meta_box(
       'page-custom-metabox', // $id 
       'Special Post Meta', // $title 
       'page_template_metabox', // $callback 
       'page', // $page 
       'normal', // $context 
       'high'); // $priority 
     } 
    } 
} 
add_action('add_meta_boxes_page', 'page_add_meta_boxes'); 


function page_template_metabox() { 
    wp_nonce_field(basename(__FILE__), 'page_meta_box_nonce'); 
    $some_string = get_post_meta($post->ID, '_some_string', true); 
    ?> 
    <input type="text" name="some-string" value="<?php echo $some_string; ?>" /> 
    <?php 
} 


function page_save_custom_post_meta() { 
    if (!isset($_POST['page_meta_box_nonce']) || !wp_verify_nonce($_POST['page_meta_box_nonce'], basename(__FILE__))){ 
     return; 
    } 
    // return if autosave 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ 
     return; 
    } 
    // check the user's permissions. 
    if (! current_user_can('edit_page', $post_id)){ 
     return; 
    } 

    // save our string 
    if (isset($_REQUEST['some-string'])) { 
     update_post_meta($post_id, '_some_string', sanitize_text_field($_POST['some-string'])); 
    } 
} 
add_action('publish_page', 'page_save_custom_post_meta'); 
add_action('draft_page', 'page_save_custom_post_meta'); 
add_action('future_page', 'page_save_custom_post_meta'); 

任何建議都理解的。

+0

嘗試用這種ADD_ACTION(「save_post」,「page_save_custom_post_meta」); –

+0

謝謝Akshay!不幸的是,即使在添加「保存帖子」操作後,它仍然不會保存。我不太確定是否有'save_page'動作,但我不相信。 – Leroy

+0

您可以將您的輸入類型名稱some-string更改爲somestring,並請相應地在請求區域中進行更改。我不確定這個建議 –

回答

0

你好人誰在將來運行到這一點。我能夠使它與下面的代碼一起工作,有人可能能夠更好地回答它爲什麼會起作用。我的想法是,將我的代碼更新爲'save_post_page'而不是'save_post'會產生差異。 (請注意我只是改變了一些信息,由於想在我的主題進行測試):

// Add meta box 
function frontpage_meta_boxes($post){ 
    global $post; 

    if(!empty($post)) 
    $page_template = get_post_meta($post->ID, '_wp_page_template', true); 
    { 
     $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true); 

     if($pageTemplate == 'page-home.php') 
     { 
      add_meta_box('frontpage_meta_box', __('Features'), 'frontpage_meta_box', 'page', 'advanced', 'high'); 
     } 
    } 
} 
add_action('add_meta_boxes_page', 'frontpage_meta_boxes'); 

// builds our meta box 
function frontpage_meta_box($post){ 
    // make sure the form request comes from WordPress 
    wp_nonce_field(basename(__FILE__), 'frontpage_meta_box_nonce'); 
    // retrieve the _manuf_url current value 
    $manufacturer_url = get_post_meta($post->ID, '_manuf_url', true); 

    ?> 
     <h3><?php _e('Manufacturer URL'); ?></h3> 
      <p> 
       <input type="text" name="manufacturer-url" value="<?php echo $manufacturer_url; ?>" /> 
      </p> 

    <?php 
} 

// saves our data 
function frontpage_save_meta_box_data($post_id){ 
    // verify meta box nonce 
    if (!isset($_POST['frontpage_meta_box_nonce']) || !wp_verify_nonce($_POST['frontpage_meta_box_nonce'], basename(__FILE__))){ 
     return; 
    } 
    // return if autosave 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ 
     return; 
    } 
    // Check the user's permissions. 
    if (! current_user_can('edit_post', $post_id)){ 
     return; 
    } 
    // manufacturer url string 
    if (isset($_REQUEST['manufacturer-url'])) { 
     update_post_meta($post_id, '_manuf_url', sanitize_text_field($_POST['manufacturer-url'])); 
    } 
    // store custom fields values 
} 
add_action('save_post_page', 'frontpage_save_meta_box_data'); 
0

嘗試用下面的代碼:

function page_save_custom_post_meta($postid) { 
if (!isset($_POST['page_meta_box_nonce']) || !wp_verify_nonce($_POST['page_meta_box_nonce'], basename(__FILE__))){ 
    return; 
} 
// return if autosave 
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ 
    return; 
} 
// check the user's permissions. 
if (! current_user_can('edit_page', $post_id)){ 
    return; 
} 

// save our string 
if (isset($_REQUEST['some-string'])) { 
    update_post_meta($post_id, '_some_string', sanitize_text_field($_POST['some-string'])); 
    } 
} 


add_action('save_post ','page_save_custom_post_meta'); 
+0

謝謝,Akshay!我刪除了其他'add_action'呃,動作並根據你的建議更新。可悲的是,內容仍然沒有保存。出於好奇,我嘗試將我的元框從一個頁面模板移動到一個自定義的帖子類型,但它仍然沒有保存。所以這很有可能是我的代碼中的東西,而不是WP上的奇怪錯誤。 – Leroy