Php 一个用于所有元数据库的保存功能

Php 一个用于所有元数据库的保存功能,php,wordpress,Php,Wordpress,我有一个设置元数据库的功能。这会在使用自定义名称实例化类时创建它们 现在,init()执行两个add\u操作函数。一个用于添加元数据库,另一个用于保存元数据库 创建metabox工作正常。然而,储蓄并不意味着什么 它只将上次创建的元盒保存到数据库中 class metaBox { final public function init() { add_action( 'add_meta_boxes', [ $this, 'add' ] ); add_acti

我有一个设置元数据库的功能。这会在使用自定义名称实例化类时创建它们

现在,
init()
执行两个
add\u操作
函数。一个用于添加元数据库,另一个用于保存元数据库

创建metabox工作正常。然而,储蓄并不意味着什么 它只将上次创建的元盒保存到数据库中

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' ] ) );
        }
    }
}
我不明白的是,当元盒有唯一的nonce和名称时,它不会同时保存这两个值

对象的创建方式如下所示:

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

    $plugin1 = new anotherForm();
    $plugin1->setName( "whaat" );
    $plugin1->init();
}
mbe_start();
为什么保存功能不起作用?我的意思是,它的原理和添加代谢组的原理完全一样

如果我禁用
isset()
函数,它会给我一个关于第一个元框的
未定义索引的通知。不确定为什么和/或如何填写。

天哪

让它工作起来。原因是给定的名称包含空格和大写字母。这就造成了问题

通过将名称替换为
strtolower(preg_replace('/-+/','-',preg_replace('/[^\wáèíú]/','-',$this->CMB_Name))