Folgendes versuche ich im Grunde zu erreichen:
Ich versuche Folgendes zu tun: Jedes Mal, wenn ich einen neuen "QUOTES" -Post erstelle, möchte ich in der Lage sein, auszuwählen, auf welche Seite dieser Zitat-Post gehen soll. Ich habe mich dazu entschlossen, eine neue Metabox auf der Post-Seite "Anführungszeichen" zu erstellen und in dieser Metabox alle Seiten mit einem Kontrollkästchen davor aufzulisten:
Alles in Ordnung und gut, aber jetzt weiß ich nicht, wie ich diese Kontrollkästchen speichern soll.
Hier ist die Funktion, mit der ich den Inhalt der Metabox drucke:
function myplugin_inner_custom_box( $post ) {
$custom = get_post_custom($post->ID);
$checkfield = $custom["checkfield"][0];
// Nonce to verify intention later
wp_nonce_field( 'save_quote_meta', 'custom_nonce' );
$pages = get_pages();
foreach ( $pages as $page ) { ?>
<input type="checkbox" name="checkfield_<?php echo $page->ID; ?>" value="yes" <?php if ($checkfield == 'yes') { ?> checked <?php } ?> /> <?php echo $page->post_title; ?> <br>
<?php
}
}
Und hier ist die Funktion, mit der ich sie speichere:
//save the meta box action
add_action( 'save_post', 'myplugin_meta_save' );
//save the meta box
function myplugin_meta_save()
{
global $post;
update_post_meta($post->ID, 'checkfield', $_POST['checkfield'] );
}
Offensichtlich funktioniert das nicht - ich bin nicht sicher, wie ich all diese Kontrollfeldwerte speichern soll.
Sie verwenden checkfield_<?php echo $page->ID; ?>
als Namen für Ihre Eingabefelder und versuchen dann, den $_POST['checkfield']
zu speichern, der not set ist.
Sie können dieselbe $pages
-Schleife für die myplugin_meta_save()
-Funktion ausführen und dann die Daten für jede Seite als separate meta_key
-Eingabe (checkfield_1
, checkfield_5
usw.) speichern. OR Sie können alle diese Daten in einem einzigen meta_key
speichern checkfield
in diesem Fall und eine kleine Änderung an Ihrem Code ist erforderlich, um dies zu erreichen:
function myplugin_inner_custom_box( $post ) {
// we store data as an array, we need to unserialize it
$checkfield = maybe_unserialize( get_post_meta($post->ID, "checkfield", true) );
// Nonce to verify intention later
wp_nonce_field( 'save_quote_meta', 'custom_nonce' );
$pages = get_pages();
foreach ( $pages as $page ) { ?>
<input id="page_<?php echo $page->ID; ?>" type="checkbox" name="checkfield[]" value="<?php echo $page->ID; ?>" <?php if ( in_array($page->ID, (array) $checkfield) ) { ?> checked <?php } ?>/> <label for="page_<?php echo $page->ID; ?>"><?php echo $page->post_title; ?></label> <br>
<?php
}
}
//save the meta box action
add_action( 'save_post', 'myplugin_meta_save', 10, 2 );
//save the meta box
function myplugin_meta_save($post_id, $post)
{
if ( isset($_POST['checkfield']) ) { // if we get new data
update_post_meta($post_id, "checkfield", $_POST['checkfield'] );
}
}
Beachten Sie, dass name="checkfield"
im Eingabefeld durch name="checkfield[]"
ersetzt wird, wodurch Daten als Array in der Variablen $_POST['checkfield']
gespeichert werden. Auch das Attribut value
wird von yes
in $page->ID
geändert.
Update: checkfield
in array
umwandeln: if ( in_array($page->ID, (array) $checkfield) )