2017-09-20 3 views
0

Je me cognais la tête contre le mur en essayant de trouver la solution à mon problème actuel. Autrement dit, j'ai créé une page de modèle 'page-home.php', je peux obtenir une méta-boîte à appeler sur le modèle de page, mais en essayant de mettre à jour la page avec des données dans la méta-boîte, les données disparaissent.Méta-case personnalisée pour le modèle de page ne sauvegardant pas les données

code ci-dessous:

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

Toutes les suggestions sont appréciés.

+0

essayer avec cette add_action (« save_post », « page_save_custom_post_meta »); –

+0

Merci, Akshay! Malheureusement, même après l'ajout de l'action «enregistrer la publication», il ne sera toujours pas enregistré. Je ne savais pas trop s'il y avait une action 'save_page', mais je ne crois pas qu'il y en ait. – Leroy

+0

pouvez-vous changer votre nom de type d'entrée une certaine chaîne à somestring et s'il vous plaît changer dans la zone de demande en conséquence. Je ne suis pas sûr de cette suggestion –

Répondre

0

Howdy tous ceux qui se jette dans à l'avenir. J'ai été capable de le faire fonctionner avec le code ci-dessous, quelqu'un pourrait être en mesure de suivre avec une meilleure réponse quant à pourquoi cela fonctionne. Je pense que mettre mon code à 'save_post_page' au lieu de simplement 'save_post' fait la différence. (Notez que je ne changeais quelques informations en raison d'essayer de le tester dans mon thème):

// 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

Essayez avec le code ci-dessous:

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

Merci, Akshay! J'ai supprimé l'autre 'add_action' euh, les actions et mis à jour selon votre suggestion. Malheureusement, le contenu ne sauve toujours pas. Par curiosité, j'ai essayé de déplacer ma méta-boîte d'un modèle de page à un type de message personnalisé, et il n'a toujours pas enregistré. Il y a donc de bonnes chances que ce soit quelque chose dans mon code au lieu d'une erreur bizarre sur WP. – Leroy