因此,我通常用于保存post meta的方法在这种情况下不起作用,即使在使用classic编辑器时起作用。我不知道为什么,但我确实找到了另一篇文章(https://www.codeinwp.com/blog/make-plugin-compatible-with-gutenberg-sidebar-api/) 有一句话最终引导我找到了一个解决方案。此外,整个,mycpt_register_post_meta()
如果您以这种方式保存数据,则似乎根本不需要函数。为了澄清,我没有在我的问题中实际展示我通常的保存方法,因为它不起作用,而且我早就放弃在这个特定的实例中使用它了,所以我没有包括它(如果有人想看,我可以添加。)
function mycpt_add_cpt_selection() {
$screens = [\'page\', \'post\'];
foreach( $screens as $screen ) {
add_meta_box(
\'mycpt_assignment\',
\'Assign Quick Links\',
\'mycpt_assign_metabox\',
$screen,
\'side\',
\'low\',
//not even sure that this array is necessary
array(
\'__block_editor_compatible_meta_box\' => true,
\'__back_compat_meta_box\' => false,
)
);
}
}
add_action( \'add_meta_boxes\', \'mycpt_add_cpt_selection\' );
function mycpt_assign_metabox( $post ) {
wp_nonce_field( basename( __FILE__ ), \'mycpt_cpt_nonce\' );
$mycpt_appended_cpts = get_post_meta( $post->ID, \'mycpt_cpts\', false ); ?>
<select id="mycpt_cpts" name="mycpt_cpts[]" multiple="multiple" style="width:90%;">
<?php
if( $mycpt_appended_cpts ) {
foreach( $mycpt_appended_cpts as $cpt_ids ) {
foreach( $cpt_ids as $cpt_id ) {
$cpt_title = get_the_title( $cpt_id );
$cpt_title = ( mb_strlen( $cpt_title ) > 50 ) ? mb_substr( $cpt_title, 0, 49 ) . \'...\' : $cpt_title;
echo \'<option value="\' . $cpt_id . \'" selected="selected">\' . $cpt_title . \'</option>\';
}
}
}
?>
</select>
<small style="display:block;font-size:0.8em;width:95%;">
Instructions
</small>
<?php }
function mycpt_assign_save_postdata( $post_id ) {
if( isset( $_POST[\'mycpt_cpts\'] ) ) {
update_post_meta( $post_id, \'mycpt_cpts\', $_POST[\'mycpt_cpts\'] );
}
}
add_action( \'save_post\', \'mycpt_assign_save_postdata\' );
所以一切都按照我想要的方式进行。唯一让我困惑的奇怪是,当我找回
post_meta
它实际上是将一个数组放入另一个数组。这是在创建多维数组,当我在其他领域使用相同的方法时,会发生这种情况。
例如,在数据库中,当我将四篇CPT帖子分配给一篇WP帖子时,它会保存为以下内容:
a:2:{i:0;s:2:"65";i:1;s:2:"66";}
这将是:
array(
0 => "65",
1 => "66"
)
但是,当我使用
get_post_meta()
, 我得到的反馈如下:
array(
0 => array(
0 => "65",
1 => "66"
),
)
你可以从中看到
select
输出中有2个foreach循环,所以我有一个解决方法,但我仍然要找出如何让它只返回一个数组。
希望其他人觉得这有用。