web-dev-qa-db-ja.com

注目の画像にオプションを追加する

注目のイメージメタボックスにオプションを追加したいです。

私はこれを行う方法を見つけました ここ

私が抱えている問題はデータベースに値を保存することです。

これが私が試したことです。

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' );

オプション形式が表示されてオプションを選択できますが、データは保存されません。
(私はその関数をその関数の中に入れようとしましたが、それもうまくいきません)

誰かが私が間違っていることを見てくれることを願っています。

2
Interactive

あなたはそれを全く正しいと思いましたが、いくつかの小さな問題があります。

まず、あなたの関数と値にはユニークな接頭辞を使ってください - opacityまたはmeta_saveは非常に一般的で他の作者によって使われることができます。

次に、メタの不透明度を取得する部分がありませんでした。追加しました - 現在の投稿からメタ値を取得するだけです。

次に、異なる不透明度をループする関数を作成しました。私もselected()関数を使用しましたが、3番目のパラメータ(echo)をfalseに設定しました。そのため、selectedはエコーする代わりに自分の値を返します。これはそのようなオプションやものを作るのに便利なWordPress関数です。

それでおしまい。

投稿のサムネイルを使用するときは必ずコードを調整し、投稿に保存されるので、サムネイル自体からではなくf711_opacityオブジェクトから$postメタ値を取得してください。

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