Metabox 不显示所选项目
Metabox Not Showing the Selected Item
我有一个自定义 post 类型,我在其中创建了 2 个分类法。
我正在使用 meta_box_cb
将默认复选框更改为单选列表,因为我只需要允许选择一个项目。
虽然这一切都有效(注意,它甚至 "saves" 正确的值),但我似乎无法获得第二个分类法来显示所选择的内容,尽管我可以看到它保存在数据库中我查询了 _postmeta
table。
数据库记录截图:
显示的屏幕截图:
这是注册分类法的代码:
private function create_the_term( $term_name, $term_label ) {
register_taxonomy(
$term_name, array( 'gyo_alerts', ),
array(
'hierarchical'=> true,
'label' => $term_label,
'singular_label' => $term_label,
'rewrite' => false,
'publicly_queryable' => false,
'public' => false,
'show_ui' => true,
'show_in_menu' => false,
'show_in_nav_menus' => false,
'show_admin_column' => true,
'capabilities' => array( // we need most of the display options, but do not want these to be edittable
'assign_terms' => 'manage_options',
'edit_terms' => 'god',
'manage_terms' => 'god',
),
'show_in_quick_edit' => false,
'meta_box_cb' => function( $post, $box ) { // change these to single-select
$the_term = $box['args']['taxonomy'];
$terms = get_terms( $the_term, array( 'hide_empty' => false ) );
$post = get_post( );
$_terms = wp_get_post_terms( $post -> ID, $the_term );
$name = '';
if ( ! is_wp_error( $_terms ) ) {
if ( isset( $_terms[0] ) ) {
$name = wp_list_pluck( $_terms, 'name' )[0];
}
}
var_dump( $name );
echo '<hr />';
var_dump( $post->ID );
echo '<hr />';
var_dump( $the_term );
echo '<hr />';
var_dump( $_terms );
foreach ( $terms as $term ) {
?>
<label title='<?php esc_attr_e( $term -> name ); ?>'>
<input type="radio" name="<?php esc_attr_e( $the_term ); ?>" value="<?php esc_attr_e( $term -> name ); ?>" <?php checked( $term -> name, $name ); ?> />
<span><?php esc_html_e( $term -> name ); ?></span>
</label><br />
<?php
}
unset( $terms, $_terms );
},
)
);
}
如何称呼它:
// Status
$this -> create_the_term( 'alert_type', 'Status' );
// Alert Activity
$this -> create_the_term( 'alert_activity', 'Activity' );
这就像 wp_get_post_terms
只针对第一个分类法被解雇...而完全忘记了第二个分类法。
我做错了什么?
深入了解为什么 $_terms = wp_get_post_terms( $post -> ID, $the_term );
没有被填充让我意识到这些并没有保存为 termmeta
,而是保存为 postmeta
一旦我将其更改为 $post_saved_terms = get_post_meta( $post -> ID, $which );
它就开始工作了
我有一个自定义 post 类型,我在其中创建了 2 个分类法。
我正在使用 meta_box_cb
将默认复选框更改为单选列表,因为我只需要允许选择一个项目。
虽然这一切都有效(注意,它甚至 "saves" 正确的值),但我似乎无法获得第二个分类法来显示所选择的内容,尽管我可以看到它保存在数据库中我查询了 _postmeta
table。
数据库记录截图:
这是注册分类法的代码:
private function create_the_term( $term_name, $term_label ) {
register_taxonomy(
$term_name, array( 'gyo_alerts', ),
array(
'hierarchical'=> true,
'label' => $term_label,
'singular_label' => $term_label,
'rewrite' => false,
'publicly_queryable' => false,
'public' => false,
'show_ui' => true,
'show_in_menu' => false,
'show_in_nav_menus' => false,
'show_admin_column' => true,
'capabilities' => array( // we need most of the display options, but do not want these to be edittable
'assign_terms' => 'manage_options',
'edit_terms' => 'god',
'manage_terms' => 'god',
),
'show_in_quick_edit' => false,
'meta_box_cb' => function( $post, $box ) { // change these to single-select
$the_term = $box['args']['taxonomy'];
$terms = get_terms( $the_term, array( 'hide_empty' => false ) );
$post = get_post( );
$_terms = wp_get_post_terms( $post -> ID, $the_term );
$name = '';
if ( ! is_wp_error( $_terms ) ) {
if ( isset( $_terms[0] ) ) {
$name = wp_list_pluck( $_terms, 'name' )[0];
}
}
var_dump( $name );
echo '<hr />';
var_dump( $post->ID );
echo '<hr />';
var_dump( $the_term );
echo '<hr />';
var_dump( $_terms );
foreach ( $terms as $term ) {
?>
<label title='<?php esc_attr_e( $term -> name ); ?>'>
<input type="radio" name="<?php esc_attr_e( $the_term ); ?>" value="<?php esc_attr_e( $term -> name ); ?>" <?php checked( $term -> name, $name ); ?> />
<span><?php esc_html_e( $term -> name ); ?></span>
</label><br />
<?php
}
unset( $terms, $_terms );
},
)
);
}
如何称呼它:
// Status
$this -> create_the_term( 'alert_type', 'Status' );
// Alert Activity
$this -> create_the_term( 'alert_activity', 'Activity' );
这就像 wp_get_post_terms
只针对第一个分类法被解雇...而完全忘记了第二个分类法。
我做错了什么?
深入了解为什么 $_terms = wp_get_post_terms( $post -> ID, $the_term );
没有被填充让我意识到这些并没有保存为 termmeta
,而是保存为 postmeta
一旦我将其更改为 $post_saved_terms = get_post_meta( $post -> ID, $which );
它就开始工作了