我已经阅读了很多关于它的文档,这里有很多其他的答案,但我似乎不明白为什么我试图添加到帖子(和页面,但让我们一次从一个开始)的自定义元框没有保存帖子元。我有一个定制的CPT,它工作得很好。我甚至使用Select2方法作为主题选项的一部分,它允许我将最多8篇文章从我的CPT分配到首页。这非常有效。
我遇到的问题是如何使用传统的add\\u metabox方法将选定的帖子从CPT保存到帖子元。Select2功能完美,我可以搜索和选择任意数量的CPT。当我在帖子上单击“更新”时,它们会显示,小轮子会旋转,看起来好像已经保存了帖子元。但是,保存的post meta不会显示在数据库中。
以下是我所拥有的:
//REGISTER CPT META SO BLOCK EDITOR CAN SAVE IT TO POSTS
function mycpt_register_post_meta() {
register_post_meta(
\'post\',
\'mycpt_cpts\',
array(
\'show_in_rest\' => true,
\'single\' => true,
\'type\' => \'string\',
)
);
}
add_action( \'init\', \'mycpt_register_post_meta\' );
//ADD CPT SELECTION METABOX TO PAGES AND POSTS
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\',
array(
\'__block_editor_compatible_meta_box\' => true,
\'__back_compat_meta_box\' => false,
)
);
}
}
add_action( \'add_meta_boxes\', \'mycpt_add_ql_selection\' );
//CPT SELECTION METABOX OPTIONS
function mycpt_assign_metabox( $post ) {
wp_nonce_field( basename( __FILE__ ), \'mycpt_ql_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_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%;">
Add some instructions here...
</small>
<?php }
最终,我将开始将这些构建为本地块,但我还没有这样做,还有我正在追逐的最后期限等。从我阅读的所有文档以及这里和其他地方的其他问题/答案来看,这应该是可行的,但事实并非如此。我只是不知道我错过了哪一步。(对于上下文,我希望允许用户将CPT中的帖子分配到帖子或页面,在模板中,我将使用post meta在侧栏中输出指向CPT的链接列表。)