web-dev-qa-db-fra.com

Comment stocker la valeur d'une liste déroulante de champ personnalisé, à sélectionner pour le post-référencement?

J'essaie de faire référence aux messages les uns aux autres. Les rédacteurs en chef doivent disposer d'une liste de sélection de titres de publication pour lier la publication actuelle à d'autres publications. Je suis assez loin, je pense. La liste de sélection apparaît correctement. Tous les titres sont là.

Maintenant, je suis bloqué au point où l'ID de la publication doit être sauvegardé.

Comment saisir la valeur de l'option sélectionnée, la sauvegarder et la définir comme valeur par défaut? Dois-je tout envelopper dans une fonction de formulaire?

Voici ce que j'ai jusqu'à présent:

add_action("admin_init", "admin_init");
add_action('save_post', 'save_reference_id');  
/*** add_meta_box ***/
function admin_init(){
    // adding a custom field to post type 'case'
    add_meta_box("refInfo-meta", "Reference", "meta_options", "case", "side", "high");
}  
/*** callback ***/
function meta_options(){
  ?>
    <form action="<?php bloginfo('url'); ?>" method="get">
      <select name="page_id" id="page_id">

      <?php
      global $post;
      // getting all child pages of ID 21
      $args = array( 'numberposts' => -1, 'post_type' => 'page', 'post_parent' => 21);
      $posts = get_posts($args);

      foreach( $posts as $post ) : setup_postdata($post); ?>
        <option value="<?php echo $post->ID; ?>"><?php the_title(); ?></option>
      <?php endforeach; ?>

      </select>
    </form>

  <?php
}  
/*** save_post ***/
function save_reference_id(){
  // big question mark
}
3
leymannx

selected() était une aide précieuse pour définir une valeur par défaut. Le reste que j'ai trouvé dans ce brillant tutoriel sur les méta-boîtes: http://code.tutsplus.com/tutorials/how-to-create-custom-wordpress-writemeta-boxes--wp-20336 avec des exemples de saisie de texte , cases à cocher et liste déroulante. Aussi Le slug de type de publication personnalisé se trompe lors de l'ajout d'une méta-boîte personnalisée m'a expliqué comment gérer correctement l'objet de publication en cours pour qu'il ne soit pas mélangé avec les objets d'options.

/*** callback ***/
function meta_options(){
  global $post;
  // storing the global post object so it doesn't get mixed up with the options
  $post_old = $post

  $custom = get_post_custom($post->ID);
  if (isset($custom["reference_id"][0])) {
    $reference_id = $custom["reference_id"][0];
  } else {
    $reference_id = '0';
  }
  ?>
    <form action="<?php bloginfo('url'); ?>" method="get">
      <select name="ref_id" id="ref_id">
        <option value="0" <?php selected($reference_id, '0'); ?>>- choose client -</option>
      <?php
      global $post;
      $args = array(
        'numberposts' => -1,
        'post_type' => 'page',
        'post_parent' => 21
        );
      $posts = get_posts($args);
      foreach( $posts as $post ) : setup_postdata($post); ?>
        <option value="<?php echo $post->ID; ?>" <?php selected($reference_id, $post->ID); ?>><?php the_title(); ?></option>
      <?php endforeach; ?>
      </select>
    </form>
  <?php
  // restoring the global post object
  $post = $post_old;
  setup_postdata( $post );
}

/*** save_post ***/
function save_reference_id(){
  global $post;
  if (isset($_POST["ref_id"])) {
    update_post_meta($post->ID, "reference_id", $_POST["ref_id"]);
  }
}
3
leymannx
add_action("admin_init", "admin_init");
add_action('save_post', 'save_reference_id');  
/*** add_meta_box ***/
function admin_init(){
    // adding a custom field to post type 'case'
    add_meta_box("refInfo-meta", "Reference", "meta_options", "case", "side", "high");
}  
/*** callback ***/
function meta_options(){
  ?>
  <select name="page_id" id="page_id">
<?php
  global $post;
  // getting all child pages of ID 21
  $args = array( 'numberposts' => -1, 'post_type' => 'page', 'post_parent' => 21);
  $posts = get_posts($args);

  foreach( $posts as $post ) : setup_postdata($post); ?>
    <option value="<?php echo $post->ID; ?>"><?php the_title(); ?></option>
  <?php endforeach; ?>
  </select>    
  <?php
}  
/*** save_post ***/
function save_reference_id($post_id){
    update_post_meta($post_id, "[meta_key]", $_POST['page_id']);
}
1
Mitul