所有元变量的一个保存功能

时间:2018-03-19 12:40:53

标签: php wordpress

我有一个设置元变量的功能。当使用自定义名称实例化类时,这会创建它们。

现在init()执行两个add_action函数。一个用于添加元数据,另一个用于保存元数据。

创建元箱工作正常。但是保存没有 它只将最后创建的元数据保存到数据库中。

class metaBox {
    final public function init() {
        add_action( 'add_meta_boxes', [ $this, 'add' ] );
        add_action( 'save_post', [ $this, 'save' ] );
    }

    public $CMB_Name;// for custom name

    public function setName( $CMB_Name ) {
        $this->CMB_Name = $CMB_Name;
    }

    public function add() { // to add the metabox
        add_meta_box(
            $this->CMB_Name,
            __( $this->CMB_Name, 'plugin' ),
            [ $this, 'display' ],
            'page',
            'normal',
            'high'
        );
    }

    public function save( $post_id ) {// to save the metabox
        $is_autosave    = wp_is_post_autosave( $post_id );
        $is_revision    = wp_is_post_revision( $post_id );
        $is_valid_nonce = ( isset( $_POST['nonce_check_value'] ) && wp_verify_nonce( $_POST['nonce_check_value'], basename( __FILE__ ) ) ) ? 'true' : 'false';

        // Exits script depending on save status
        if ( $is_autosave || $is_revision || ! $is_valid_nonce ) {
            return;
        }
        if ( isset( $_POST[ $this->CMB_Name . '-text' ] ) ) {
            update_post_meta( $post_id, $this->CMB_Name . '-text', sanitize_text_field( $_POST[ $this->CMB_Name . '-text' ] ) );
        }
    }
}

我不明白的是,当元组中有唯一的随机数和名称时,它不会保存这两个值。

对象的创建方式如下:

function mbe_start() {
    $plugin = new testForm();
    $plugin->setName( "OOP Plugin name" );
    $plugin->init();

    $plugin1 = new anotherForm();
    $plugin1->setName( "whaat" );
    $plugin1->init();
}
mbe_start();

为什么保存功能不起作用?我的意思是它的原理与添加元数据的原理完全相同。

如果我停用isset()功能,则会向我发出有关第一个元数据的Undefined index的通知。不确定为什么和/或如何填写它。

1 个答案:

答案 0 :(得分:0)

OMG .....

搞定了。原因是给定的名称包含空格和大写字母。这导致了这个问题。

通过将名称替换为
来修复它 strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $this->CMB_Name)));