Используя следующий код, мне удалось добавить Rating в мой собственный post_type, и я намерен показывать знаки зодиака в соответствии с номером рейтинга:
function display_game_meta_box( $game ) {
// Retrieve current name of the Author and Game Rating based on review ID
$game_Author = esc_html( get_post_meta( $game->ID, 'game_Author', true ) );
$game_rating = intval( get_post_meta( $game->ID, 'game_rating', true ) );
?>
<table>
<tr>
<td style="width: 100%">Game Author</td>
<td><input type="text" size="80" name="game_Author_name" value="<?php echo $game_Author; ?>" /></td>
</tr>
<tr>
<td style="width: 150px">Game Rating</td>
<td>
<select style="width: 100px" name="game_rating">
<?php
// Generate all items of drop-down list
for ( $rating = 5; $rating >= 1; $rating -- ) {
?>
<option value="<?php echo $rating; ?>" <?php echo selected( $rating, $game_rating ); ?>>
<?php echo $rating; ?> stars <?php } ?>
</select>
</td>
</tr>
</table>
<?php
}
function my_admin() {
add_meta_box( 'game_meta_box',
'Game Details',
'display_game_meta_box',
'games', 'normal', 'high'
);
}
add_action( 'admin_init', 'my_admin' );
Внутри моего файла шаблона я использовал это для просмотра стартов в соответствии с их выбранным количеством:
<?php
$nb_stars = intval( get_post_meta( get_the_ID(), 'game_rating', true ) );
for ( $star_counter = 1; $star_counter <= 5; $star_counter++ ) {
if ( $star_counter <= $nb_stars ) {
echo 'star';
} else {
echo 'grey';
}
}
?>
Когда я просматриваю страницу, я вижу, что выполняется только оператор else.
Другое дело, что когда я выбираю рейтинг в бэкэнде, он показывает мне 5 запусков после обновления, хотя это не 5, которые я выбрал.
Вот что я пытался сохранить данные метабокса:
function add_movie_review_fields( $game_id, $game ) {
// Check post type for movie reviews
if ( $game->post_type == 'games' ) {
if ( isset( $_POST['game_rating'] ) && $_POST['game_rating'] != '' ) {
update_post_meta( $game_id, 'games', $_POST['game_rating'] );
}
}
}
add_action( 'save_post', 'add_movie_review_fields', 10, 2 );
Есть ли что-то, что я могу делать не так с рейтингом?
$nb_stars
вероятно, пусто, потому что вы не сохраняете свою мету с правильным ключом.
function add_movie_review_fields( $game_id, $game ) {
// Check post type for movie reviews
if ( $game->post_type == 'games' ) {
if ( isset( $_POST['game_rating'] ) && $_POST['game_rating'] != '' ) {
update_post_meta( $game_id, 'game_rating', $_POST['game_rating'] ); // changed meta key
}
}
}
add_action( 'save_post', 'add_movie_review_fields', 10, 2 );
Обновляемый мета-ключ должен совпадать с ключом, который вы выбираете. Сейчас $nb_stars
должен получить правильное мета значение поста.
Других решений пока нет …