页面模板的自定义元框不保存数据

时间:2017-09-20 16:20:18

标签: php wordpress metadata custom-post-type

一直在撞墙,试图弄清楚我当前问题的解决方案。简单地说,我已经创建了一个&page 39- 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' );

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

你们将来遇到这种情况的人。我能够使用下面的代码,有人可以跟进一个更好的答案,为什么它的工作原理。我的想法是将我的代码更新为&#39; save_post_page&#39;而不只是&#39; save_post&#39;有所作为。 (注意我只是因为尝试在我的主题中测试它而改变了一些信息):

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

答案 1 :(得分: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');