2017-09-20 2 views
0

Ich habe meinen Kopf gegen die Wand geschlagen und versucht, die Lösung für mein aktuelles Problem herauszufinden. Einfach gesagt, ich habe eine Template-Seite 'Seite-Startseite.php' erstellt, kann eine Meta-Box aufrufen, um die Seitenvorlage aufzurufen, aber wenn ich versuche, die Seite mit Daten in der Meta-Box zu aktualisieren, verschwinden die Daten.Benutzerdefinierte Metabox für Seitenvorlage, die keine Daten speichert

-Code unten:

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

Irgendwelche Vorschläge geschätzt werden.

+0

versuchen mit diesem add_action (‚save_post‘, ‚page_save_custom_post_meta‘); –

+0

Danke, Akshay! Leider wird auch nach dem Hinzufügen der Aktion "Post speichern" immer noch nicht gespeichert. Ich war mir nicht sicher, ob es eine 'save_page'-Aktion gibt, aber ich glaube nicht, dass es eine gibt. – Leroy

+0

können Sie den Namen des Eingabedatentyps in eine Zeichenfolge ändern und ändern Sie sie bitte entsprechend im Anforderungsbereich. Ich bin nicht sicher für diesen Vorschlag –

Antwort

0

Howdy alle, die in diese in Zukunft läuft. Ich konnte es mit dem Code unten arbeiten, jemand könnte in der Lage sein, eine bessere Antwort zu folgen, warum es funktioniert. Mein Gedanke ist, dass die Aktualisierung meines Codes auf "save_post_page" anstelle von "save_post" den Unterschied macht. (Beachten Sie mir nur einige Informationen geändert aufgrund versuchen, es in meinem Thema zu testen):

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

Versuchen mit folgendem Code:

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

Danke, Akshay! Ich entfernte die anderen 'add_action' uh, Aktionen und aktualisiert nach Ihrem Vorschlag. Leider speichert der Inhalt immer noch nicht. Aus Neugierde habe ich versucht, meine Meta-Box von einer Seitenvorlage in einen benutzerdefinierten Beitragstyp zu verschieben, und es wurde trotzdem nicht gespeichert. Es gibt also eine gute Chance, dass es etwas in meinem Code ist, anstelle eines seltsamen Fehlers bei WP. – Leroy

Verwandte Themen