web-dev-qa-db-ja.com

フォーマットの変更 - フォーマット変更時にメタボックスを切り替える方法

問題

その投稿フォーマットは かなり人気がありますが 極端に大まかに描かれた概念だけです、私はユーザーが可能なトラップに遭遇するのを見ます。

投稿フォーマット...

  • 投稿メタフィールドを使用します。ユーザーは正確なメタキー名を覚えていません。
  • リンク/埋め込み/ポストエディタからの任意のオブジェクトを取得し、ユーザーが誤ったデータを入力した。

どちらも、ユーザーが攻撃する可能性のあるトラップの例です。

アイディア

投稿形式には、必要なデータの入力のみを許可するカスタムメタボックスがあります。

アイデア自体はそれほど悪くはありませんが、それでもユーザーがやらなければならない問題があります。

  • 正しいメタボックスにデータを入れる
  • それから適切な投稿フォーマットを選択してください。

質問

私が探しているのは

  • ユーザーが投稿フォーマットメタボックス内で行った選択に基づいてメタボックス(またはそのコンテンツのみ)を切り替える(ajax)ソリューション

または...

  • メタボックス内のajax/jquery-uiタブを使用してメタボックスの内容を切り替える および 'save_post'で該当する投稿フォーマットを保存する

注意:
メタボックスの正確な内容を探しているのではありません。私が最も興味を持ったのは、さまざまなcodeの例の中で「環境」を見ることです。

ありがとうございました!

7
kaiser

私はこのようなことを一度やったことがありますが、あなたが特定のカテゴリをクリックしたとき(本質的に同じ)確かにそれは本当のajaxソリューションではなく、設定でdivを隠して明らかにしますが、それはうまくいくソリューションです。あなたは間違いなくあなたのニーズに合わせてこれを修正しなければならないでしょう、しかしあなたがjQueryをよく知っていれば、きっとあなたのニーズに合わせてこれを修正することができるでしょう。あなたがあなたのニーズについてもう少し具体的であるならば、私はあなたがより正確に探しているものに合うようにこれを編集して幸せであると思います。

コード:

私はプラグインでこれを使用しましたが、あなたはちょうどあなたのテーマのfunctions.phpにこれを入れることができます

function customadmin_testimonial() {
    if ( is_admin() ) {
        $script = <<< EOF
<script type='text/javascript'>
    jQuery(document).ready(function($) {
        $('#testimonial-information').hide();
        $('#in-category-3').is(':checked') ? $("#testimonial-information").show() : $("#testimonial-information").hide();
        $('#in-category-3').click(function() {
            $("#testimonial-information").toggle(this.checked);
        });
    });
</script>
EOF;
        echo $script;
    }
}
add_action('admin_footer', 'customadmin_testimonial');

基本的にあなたがここに持っているものは最初に私がすでにセットアップしたメタボックスを隠すjQueryスクリプトです。箱のIDは#testimonial-informationです。次に、特定のカテゴリのボックスがチェックされているかどうかをチェックし、チェックされている場合はそれを表示します。それからそれは特定のカテゴリーのボックスのクリックを聞き、それが見えるかどうかを切り替えます。

結果:

ユーザーが特定のカテゴリを選択したときにのみ表示されるメタボックス。あなたがする必要があるのはあなたのメタボックスをセットアップしてあなたが必要とする要素のすべてのIDを取得することだけです。問題のチェックボックスだけでなくメタボックスのIDも必要です。それからあなたがする必要があるのはあなたが探しているものを得るためにこの公式に従うことです。

あなたがすべてを設定しているのにjavascriptを書いているハングアップをしているのであれば、ちょうど私にメタボックスのIDと対応するチェックボックスを提供してください、そして私はあなたのためにそれを書いて幸せです。

4
Drew Gourley

これが最終的なJavaScript関数です。それはadmin_footerフックにフックされるべきです。

/**
 * jQuery show/hide for meta box, post editor meta box
 * 
 * Hides/Shows boxes on demand - depending on your selection inside the post formats meta box
 */
function wpse14707_scripts()
{
    wp_enqueue_script( 'jquery' );

    $script = '<<< EOF
    <script type="text/javascript">
        jQuery( document ).ready( function($)
            {
                $( "#post_format_box" ).addClass( "hidden" );

                $( "input#post-format-0" ).change( function() {
                    $( "#postdivrich" ).removeClass( "hidden" );
                    $( "#post_format_box" ).addClass( "hidden" );
                } );

                $( "input:not(#post-format-0)" ).change( function() {
                    $( "#postdivrich" ).addClass( "hidden" );
                    $( "#post_format_box" ).removeClass( "hidden" );
                } );

                $( "input[name=\"post_format\"]" ).click( function() {
                    var mydiv = $(this).attr( "id" ).replace( "post-format-", "" );
                    $( "#post_format_box div.inside div" ).addClass("hidden");
                    $( "#post_format_box div.inside div#"+mydiv).removeClass( "hidden" );
                } );
            }
        );
    </script>
    EOF';

    return print $script;
}
add_action( 'admin_footer', 'wpse14707_scripts' );
5
kaiser