wake-up-neo.net

Behalten Sie den Wert der angezeigten Metadaten im Backend bei - Benutzerdefinierte Metabox

Ich habe versucht, einen benutzerdefinierten Beitragstyp und ein benutzerdefiniertes Meta-Feld hinzuzufügen. Was ich getan habe. Aber ich stehe vor einem anderen Problem. Wenn ich einen Wert in die benutzerdefinierte Metabox eingebe, habe ich erstellt, dass die Daten im Backend nicht gespeichert werden. Es funktioniert perfekt auf dem Frontend.

Jetzt muss ich den Wert jedes Mal eingeben, da der Wert im Backend nicht beibehalten wird, wenn ich den Beitrag aktualisiere.

Folgendes habe ich bisher getan:

function news_post_type() {
  $labels = array(
    'name'               => _x( 'News', 'post type general name' ),
    'singular_name'      => _x( 'News', 'post type singular name' ),
    'add_new'            => _x( 'Add New', 'book' ),
    'add_new_item'       => __( 'Add New' ),
    'edit_item'          => __( 'Edit News' ),
    'new_item'           => __( 'New News' ),
    'all_items'          => __( 'All News' ),
    'view_item'          => __( 'View News' ),
    'search_items'       => __( 'Search News' ),
    'not_found'          => __( 'Not found' ),
    'not_found_in_trash' => __( 'Not found in the Trash' ), 
    'parent_item_colon'  => '',
    'menu_name'          => 'News'
  );
  $args = array(
    'labels'        => $labels,
    'description'   => 'This section contains the News section of the site',
    'public'        => true,
    'menu_position' => 5,
    'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments'),
    'has_archive'   => true,
  );
  register_post_type( 'news', $args ); 
}
add_action( 'init', 'news_post_type' );

und für die metabox:

add_action( 'add_meta_boxes', 'news_date_box' );

function news_date_box() {
    add_meta_box( 
        'news_date_box',
        __( 'News Date', 'myplugin_textdomain' ),
        'news_date',
        'news',
        'side',
        'high'
    );
}

function news_date( $post ) {

  wp_nonce_field( plugin_basename( __FILE__ ), 'news_date_content_nonce' );

  echo '<input type="text" id="news_date" name="news_date" placeholder="Enter Date"/>';

}

add_action( 'save_post', 'news_date_save' );

function news_date_save( $post_id ) {

  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
  return;

  if ( !wp_verify_nonce( $_POST['news_date_content_nonce'], plugin_basename( __FILE__ ) ) )
  return;

  if ( 'page' == $_POST['post_type'] ) {
    if ( !current_user_can( 'edit_page', $post_id ) )
    return;
  } else {
    if ( !current_user_can( 'edit_post', $post_id ) )
    return;
  }

  $news_date = $_POST['news_date'];
  update_post_meta( $post_id, 'news_date', $news_date );
}

Ich habe nach der Lösung gesucht, aber keine gefunden und bin hier gelandet. Möglicherweise habe ich einen Fehler im obigen Code gemacht oder ich muss zusätzliche Codes hinzufügen. Irgendein Vorschlag, wie man diese Situation löst.

Danke im Voraus.

1

Ändern Sie Ihre Funktion news_date() folgendermaßen:

function news_date( $post ) {

wp_nonce_field( plugin_basename( __FILE__ ), 'news_date_content_nonce' );

// get the current value of 'news_date' to use in the <input>
$value = get_post_meta ($post->ID, 'news_date', true) ;

echo '<input type="text" id="news_date" name="news_date" placeholder="Enter Date" value="' . $value . '"/>';

}

Ein weiterer Vorschlag wäre, zu ändern

add_action( 'save_post', 'news_date_save' );

zu

add_action( 'save_post_news', 'news_date_save' );

und dann können Sie sicher sein, dass Ihre Funktion news_date_save() nur aufgerufen wird, wenn ein Beitrag gespeichert ist, dessen post_type == 'news' gespeichert ist.

Auf diese Weise können Sie die if ( 'page' == $_POST['post_type'] ) { if/then/else loswerden, da die Bedingung in dieser if niemals als wahr ausgewertet wird.