web-dev-qa-db-fra.com

Ajouter des options à l'image sélectionnée

Je souhaite ajouter une option à la métabox de l'image en vedette.

J'ai trouvé un moyen de faire cela ici

Le problème que je rencontre est la sauvegarde de la valeur dans la base de données.

Voici ce que j'ai essayé:

add_filter( 'admin_post_thumbnail_html', 'featured_image_opacity');
function featured_image_opacity( $myhtml ) {
    //$selected_option = GET META OPACITY HERE
    return $myhtml .= 'Opacity: 
    <form>
        <select>
            <option'. ($selected_option == "0.1" ? "selected" : "" ).' value="0.1">0.1</option>
        </select>
    </form>';
}
function meta_save( $post_id ) {
        if( isset( $_POST[ 'opacity' ] ) ) {update_post_meta( $post_id, 'opacity', sanitize_text_field( $_POST[ 'opacity' ] ) );}   
    }   
add_action( 'save_post', 'meta_save' );

Je vois la forme-option et peux sélectionner une option, mais cela ne sauvegardera pas les données.
(J'ai aussi essayé de mettre la fonction dans la fonction mais cela ne marche pas non plus)

J'espère que quelqu'un voit ce que je fais mal.

2
Interactive

Vous avez tout à fait raison, mais avec quelques problèmes mineurs.

Tout d’abord, veuillez utiliser un préfixe uniqe pour vos fonctions et valeurs - opacity ou meta_save sont assez génériques et pourraient être utilisés par d’autres auteurs.

Deuxièmement, la partie où vous obtenez la méta-opacité était manquante, je l'ai ajoutée pour vous - il suffit de récupérer la méta-valeur de la publication en cours.

Troisièmement, j'ai ensuite créé une fonction pour parcourir les différentes opacités. Moi aussi, j'ai utilisé la fonction selected(), mais avec le troisième paramètre (echo) défini sur false - ainsi sélectionné renvoie ma valeur au lieu de la répercuter. C'est une fonction pratique de WordPress permettant de créer de telles options et ce genre de choses.

C'est tout.

Veillez simplement à ajuster votre code lorsque vous utilisez la miniature de publication et veillez à obtenir la méta-valeur f711_opacity à partir de l'objet $post, et non à partir de la miniature elle-même, car elle est enregistrée dans la publication.

add_filter( 'admin_post_thumbnail_html', 'f711_add_something_to_feature_thumb_box', 10, 2 ); //same as before
function f711_add_something_to_feature_thumb_box( $myhtml, $post_id ) {

    $selected_option = get_post_meta( $post_id, 'f711_opacity', true ); // get the current value
    for ( $i = 0; $i <= 1; $i = $i + 0.1 ) { //loop from 0 to 1 in 0.1 increments
        $selects .= '<option value="' . $i . '" ' . selected( $selected_option, $i, false ) . '>' . $i . '</option>'; //add a option field, and select it if it is the one saved before
    }
    //create the return html, with the selects created before
    return $myhtml .= 'Opacity: 
        <form>
            <select name="f711_opacity">
                ' . $selects . '
            </select>
        </form>';
}

// function and action to save the new value to the post
function f711_meta_save( $post_id ) {
    if( isset( $_POST[ 'f711_opacity' ] ) ) {
        update_post_meta( $post_id, 'f711_opacity', sanitize_text_field( $_POST[ 'f711_opacity' ] ) );
    }   
}
add_action( 'save_post', 'f711_meta_save' );    
3
fischi