Ich habe eine Metabox innerhalb einer Klasse erstellt. Ich brauchte es für einen benutzerdefinierten Post-Typ, den ich hatte. Die Metabox wird angezeigt, aber die Werte können nicht gespeichert werden. Ich habe den Code mehrmals geändert, aber es funktioniert immer noch nicht für mich. Weißt du, was ich falsch mache? Hier ist der vollständige Code:Metabox-Daten werden nicht gespeichert
<?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:
Der Code gegeben durch Mukesh Panchal hat super funktioniert. Es speichert, wie ich es wollte, aber ich kann immer noch nicht die Metadaten auf der Vorlage anzeigen. Irgendwelche Ideen, warum das so ist?
"Notice: Undefined index: portfolio_web_design in /Applications/MAMP/htdocs/wordpress/wp-content/themes/chic/portfolio_meta.php on line 37" – Jubiki
Er sagt, dass für alle von ihnen. – Jubiki
Ich habe den Code ein wenig bearbeitet (hinzugefügt einen Haken), sollte jetzt funktionieren. –