代码之家  ›  专栏  ›  技术社区  ›  Dan M.

Wordpress中的自定义元框未更新-需要帮助识别此函数中的错误

  •  2
  • Dan M.  · 技术社区  · 8 年前

    我创建了一个小插件,将颜色元框添加到自定义帖子类型中。该框显示良好,但我似乎无法保存数据。当我在字段中键入内容并单击更新时,字段将返回空白。我对此进行了研究,并遵循了许多教程,每个教程都提供了稍微不同的方法。下面的代码对我来说是最容易理解的,因此我非常感谢您能帮助我识别其中的错误。这是我的第一个问题,如果我遗漏了任何相关内容,我很抱歉。

    下面是我如何添加该框的:

    add_action( 'add_meta_boxes', 'addmeta' );
    function addmeta() {
        $post_types = array ('post', 'ev');
    
        foreach ( $post_types as $post_type ) {
            add_meta_box (
            'color_box',
            'Color',
            'display_meta_box',
            $post_type,
            'side'
            );
        }
    }
    
    add_action ( 'add_meta_boxes', 'addmeta');
    

    显示元框的函数:

    function display_meta_box() {
    
        $value = get_post_meta( $post->ID, '_mykey', true);
    
        wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
    
        ?>
    
    <label for="color_box"><strong>Color:</strong> </label>
    <input type="text" name="my_text" id="my_text" />
    
        <?php
    
    }
    

    这是保存功能:

    function save_meta_box ( $post_id ) {
    
        $is_autosave = wp_is_post_autosave( $post_id );
        $is_revision = wp_is_post_revision( $post_id );
    
        $wp_valid_nonce = false;
    
        if( isset( $_POST[ 'my_nonce' ] ) ) {
    
            if ( wp_verify_nonce( $_POST['my_nonce'], basename( __FILE__ ) ) ) {
    
                $is_valid_nonce = true;
    
            }
    
        }
    
        if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;
    
        if( array_key_exists( 'color_box', $_POST ) ) {
    
            update_post_meta(
                $post_id,
                '_mykey',
                sanitize_text_field( $_POST[ 'color_box' ] )
            );
    
        }
    
    }
    
    add_action( 'save_post', 'save_meta_box' );
    

    非常感谢。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Husain Ahmed    8 年前

    您需要定义ID。请检查此代码,它将最终起作用。

    function display_meta_box( ) {
    
    
        $value = get_post_meta( get_the_ID(), '_mykey', true);
    
        wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
    
        ?>
    
    <label for="color_box"><strong>Color:</strong> </label>
    <input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" />
    
        <?php
    
    }
    
        2
  •  1
  •   Aftab H.    8 年前

    您在函数的输入框中输入了错误的名称 display_meta_box . 用以下函数替换您的函数。

    function display_meta_box() {
       global $post;
        $value = get_post_meta( $post->ID, '_mykey', true);
    
        wp_nonce_field( basename( __FILE__ ), 'my_nonce' );
    
        ?>
    
    <label for="color_box"><strong>Color:</strong> </label>
    <input type="text" name="color_box" value="<?php echo $value;?>" id="my_text" />
    
        <?php
    
    }
    

    希望这会有所帮助。如果有任何问题,请告诉我。

    推荐文章