注目のイメージメタボックスにオプションを追加したいです。
私はこれを行う方法を見つけました ここ
私が抱えている問題はデータベースに値を保存することです。
これが私が試したことです。
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' );
オプション形式が表示されてオプションを選択できますが、データは保存されません。
(私はその関数をその関数の中に入れようとしましたが、それもうまくいきません)
誰かが私が間違っていることを見てくれることを願っています。
あなたはそれを全く正しいと思いましたが、いくつかの小さな問題があります。
まず、あなたの関数と値にはユニークな接頭辞を使ってください - 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' );