web-dev-qa-db-fra.com

Widget: Liste déroulante de type publication personnalisée, côté administrateur

Widget: Je crée un widget personnalisé avec les fonctionnalités suivantes côté administrateur.

  1. 3 champs de texte
  2. 2 menus déroulants pour sélectionner les publications par titre (les deux appartenant à un type de publication personnalisé)

À l'heure actuelle, au lieu d'un menu déroulant, l'utilisateur doit saisir le numéro d'identification de la publication dans un champ de texte. Le widget utilise l'identifiant de publication pour récupérer les bonnes données dans les publications appropriées et les afficher au premier plan. Je dois pouvoir faire en sorte que l'administrateur sélectionne un titre d'article dans la liste déroulante, puis que le widget stocke le numéro d'identification de l'article sélectionné dans une variable et enregistre les informations.

Mon code jusqu'à présent Ceci est juste pour le menu déroulant; ce que j'ai concocté à partir de divers exemples trouvés sur le Web. J'aimerais penser que je suis proche, mais je suis vraiment perplexe.

<?php
$selected = isset( $values['$bookid1'] ) ? esc_attr( $values['$bookid1'] ) : ''; 
global $post;
$args = array('post_type' => 'bookdetail','post_status' => 'publish');
$myposts = get_posts( $args );
echo '<select name="bookid1" id="bookid1">';
foreach( $myposts as $post ) :
    setup_postdata($post);
    $bookid1 = $post->ID;   
    $displaytitle = substr( get_the_title($post->ID), 0, 50);
    echo '<option value="' . $bookid1 . '"' .  selected( $selected, $bookid1 ) .'>' . $displaytitle . '</option>';
endforeach;
echo '</select>';
?>

Alors...
Comment enregistrer dans $bookid1 le numéro d'identification de la publication que l'administrateur a sélectionnée dans la liste déroulante?
Comment enregistrer cette variable et cette sélection dans la section "enregistrer les données" du code de widget?

J'apprécie toute aide que la communauté pourrait fournir.

1
Joe

Voici ce que j'ai découvert et utilisé, cela vous aidera peut-être:

function custom_posttype_dropdown($name, $selected)
{       
    $out = "";
    $posts = get_posts(
        array(
            'post_type'  => 'bctap_templates',
            'numberposts' => -1
        )
    );
    if($posts )
    {

        $out = '<select name="'.$name.'" ><option>Select a Template</option>';
        foreach( $posts as $p )
        {
            if ($p==$selected)
            {
                $selected = "selected = 'selected'";
            }
            else
            {
                $selected = "";
            }
            $out .= '<option value="' . $p->ID . '" '.$selected.'>' .$p->post_title  . '</option>';
        }
        $out .= '</select>';
    } 
    else
    {
        $out = '<select name="'.$name.'" value="x" ><option>Select a Option</option>';
        foreach( $posts as $p )
        {               
            $out .= '<option value="x" '.$selected.'>None Created Yet.</option>';
        }
        $out .= '</select>';
    }
    return $out;
}

//to call
echo custom_posttype_dropdown($name, $selected);
1
Hudson Atwell