Я создал метабокс внутри класса. Мне он нужен для специального типа сообщений, который у меня был. Метабокс отображается отлично, но значения не сохраняются. Я несколько раз менял код, но он все еще не работает для меня. Вы знаете, что я делаю неправильно? Вот полный код:Данные Metabox не сохраняются
<?php
class portfolio_metabox {
public function __construct() {
if (is_admin()) {
add_action('load-post.php', array($this, 'init_metabox'));
add_action('load-post-new.php', array($this, 'init_metabox'));
}
}
public function init_metabox() {
add_action('add_meta_boxes', array($this, 'add_metabox'));
add_action('save_post', array($this, 'save_metabox'), 10, 2);
}
public function add_metabox() {
add_meta_box(
'details',
__('Project Details', 'chic'),
array($this, 'render_project_metabox'),
'portfolio',
'advanced',
'default'
);
}
public function render_project_metabox($post) {
// Retrieve an existing value from the database.
$portfolio_web_design = get_post_meta($post->ID, 'portfolio_web_design ', true);
$portfolio_web_dev = get_post_meta($post->ID, 'portfolio_web_dev ', true);
$portfolio_digital_art = get_post_meta($post->ID, 'portfolio_digital_art ', true);
$portfolio_graphic_design = get_post_meta($post->ID, 'portfolio_graphic_design ', true);
// Set default values.
// Form fields.
echo '<table class="form-table">';
echo '<tr>';
echo '<th><label for="portfolio_project" class="portfolio_project_label">' . __('Project Type', 'chic') . '</label></th>';
echo '<td>';
echo '<label><input type="checkbox" name="portfolio_web_design " class="portfolio_project_field" value="' . $portfolio_web_design . '" ' . checked($portfolio_web_design , 'checked', false) . '> ' . __(' Web Design', 'chic') . '</label><br>';
echo '<label><input type="checkbox" name="portfolio_web_dev " class="portfolio_project_field" value="' . $portfolio_web_dev . '" ' . checked($portfolio_web_dev , 'checked', false) . '> ' . __(' Web Development', 'chic') . '</label><br>';
echo '<label><input type="checkbox" name="portfolio_digital_art " class="portfolio_project_field" value="' . $portfolio_digital_art . '" ' . checked($portfolio_digital_art , 'checked', false) . '> ' . __(' Digital Art', 'chic') . '</label><br>';
echo '<label><input type="checkbox" name="portfolio_graphic_design " class="portfolio_project_field" value="' . $portfolio_graphic_design . '" ' . checked($portfolio_graphic_design , 'checked', false) . '> ' . __(' Graphic Design', 'chic') . '</label><br>';
echo '<p class="description">' . __('Project Type', 'chic') . '</p>';
echo '</td>';
echo '</tr>';
echo '</table>';
}
public function save_metabox($post_id, $post) {
// Sanitize user input.
$portfolio_new_web_design = isset($_POST[ 'portfolio_web_design' ]) ? 'checked' : '';
$portfolio_new_web_dev = isset($_POST[ 'portfolio_web_dev' ]) ? 'checked' : '';
$portfolio_new_digital_art = isset($_POST[ 'portfolio_digital_art' ]) ? 'checked' : '';
$portfolio_new_digital_art = isset($_POST[ 'portfolio_graphic_design' ]) ? 'checked' : '';
// Update the meta field in the database.
update_post_meta($post_id, 'portfolio_web_design ', $portfolio_new_web_design );
update_post_meta($post_id, 'portfolio_web_dev ', $portfolio_new_web_dev );
update_post_meta($post_id, 'portfolio_digital_art ', $portfolio_new_digital_art );
update_post_meta($post_id, 'portfolio_graphic_design ', $portfolio_new_digital_art );
}
}
new portfolio_metabox;
?>
UPDATE:
Код дается Мукеш Panchal работал большой. Он сохраняется так же, как я хотел, но я все еще не могу получить метаданные для отображения на шаблоне. Любые идеи, почему это происходит?
«Примечания: Undefined индексу: portfolio_web_design в /Applications/MAMP/htdocs/wordpress/wp-content/themes/chic/portfolio_meta.php по строке 37» – Jubiki
Он говорит, что для всех из них. – Jubiki
Я немного отредактировал код (добавлен чек), теперь должен работать. –