我有一个设置元变量的功能。当使用自定义名称实例化类时,这会创建它们。
现在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
的通知。不确定为什么和/或如何填写它。
答案 0 :(得分:0)
OMG .....
搞定了。原因是给定的名称包含空格和大写字母。这导致了这个问题。
通过将名称替换为
来修复它
strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $this->CMB_Name)));