web-dev-qa-db-ja.com

プラグインのメタボックスでカスタムフィールドホイールを作り直すことを避けるにはどうすればよいですか?

これがシナリオです。

私のプラグインでは、ポスト/ページエディタにメタボックスを表示したいです。

メタボックスをWordPressの ''カスタムフィールド ''メタボックスのようにする必要があります(別の追加、削除、更新、自動入力ドロップダウン、新しいリンクの入力、AJAXマジックなど)。いくつかの小さな違いがあります。

  • 'Name'と 'Value'だけでなく、 'Target'、 'Name'と 'Value'が欲しい

  • それらすべてをWP Custom Fieldsメタボックス内に自動的に表示される 'public'カスタムフィールドとして保存するのではなく、 'private'名前空間フィールド内に単一の多次元配列として格納します。 、_myplugin_custom_fields = array( 1 => array( 'target' => 'mytarget1', 'name' => 'myname1', 'value' => 'myvalue1' ), 2 => array( 'target' => 'mytarget2', 'name' => 'myname2', 'value' => 'myvalue2' ) )

私は一日中WP Coreのもつれたウェブを掘り下げて調べてきましたが、これをやってのける簡単な方法を見つけることができませんでした。私の現在の理解に基づいて先に進むと、私は多数のphpファイルとjsファイルから何百行ものコアコードを複製することになります。

WordPress Answers-landにいる誰かが私を正しい方向に向けるのに役立ちますか?私はテーマやプラグインの中でメタボックスを追加して活用することに豊富な経験を持っていますが、これは私に全くつまずいています。

私がはっきりしていないのならば、話してください。

返信してくれたすべての人に感謝します。

4
SethMerrick

簡単な答えは、カスタムフィールドメタボックスは拡張性を念頭に置いて書かれていないので、これを行うための直接的な方法がないということです。

JavaScriptを使用して追加のフィールドを追加し、[追加]ボタンをクリックしてデータをカスタムAJAXハンドラに送信し、必要に応じてそれらを格納します。

2
scribu

私たちは同じようなことに取り組んでいるようですね。これが役立つかどうかはわかりませんが、他のアイデアが得られる可能性があります。

3部構成のブログ投稿の1番目 - http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html

それが役に立てば幸い!

0

カスタムフィールドを_meta_whateverという名前で保存しています。アンダースコアで名前を始めると、WordPressが通常の投稿のドロップダウンボックスにカスタムフィールドを表示するのを止めます。

配列に保存するために、私はこのようなHTMLコードを使っています。

...
<input type="text" class="short" name="_events_meta[startDate]" id="_events_meta[startDate]" value="<?php if(!empty($meta['startDate'])) echo $meta['startDate']; ?>"/>
<input type="text" class="extrashort" name="_events_meta[startTime]" id="_events_meta[startTime]" value="<?php if(!empty($meta['startTime'])) echo $meta['startTime']; ?>"/>
...

メタ値を取得するために、これは私が使っている私のコードです。

...
$meta = get_post_meta($post->ID,'_events_meta',TRUE);
...

これで、連想配列$metaが作成されました。ここで、キー名はid- Elementのinput- Attributeの括弧内に示されています。

保存するために、私はこのようなコードを使っています

...
$new_data = $_POST['_events_meta'];
...
add_post_meta($post_id,'_events_meta',$new_data,TRUE);
...

そのためwp_postsmetaに1レコードとして保存されます

これが助けになり、私の側から明確に表現されていることを願いますか?

0
Guru 2.0