選択したページテンプレートに基づいて管理メタボックスを切り替える


18

特定のテンプレートが特定のWordPressページに割り当てられている場合にのみ、カスタムフィールドインターフェイスが表示されるようにします。

何か案は?


:それは「ライブ」する必要がない場合(つまり、ページテンプレートを変更するとmetaboxがすぐ消える/表示されるようにする必要はありません)、この関連の質問を参照wordpress.stackexchange.com/questions/48611/...
スティーブン・ハリス

@StephenHarrisコメントありがとうございます。WPAlchemy MetaBoxクラスを使用することにしました。これには、セットアップに「テンプレートごと」オプションが含まれています。
ジョナサンウォルド

回答:


22

この状況に対処する最善の方法は、JavaScriptを使用することです。これにより、選択した値が変更されるたびに、関連するメタボックスを即座に非表示/表示できます。

wp_enqueue_script()in functions.phpを使用して、管理領域にカスタムJavaScriptファイルをロードします。

add_action('admin_enqueue_scripts', 'my_admin_script');
function my_admin_script()
{
    wp_enqueue_script('my-admin', get_bloginfo('template_url').'/my-admin.js', array('jquery'));
}

jQueryを必要とするスクリプト自体は、ページテンプレートドロップダウンリストで選択した値に基づいてメタボックスを非表示または表示するだけです。この例では、デフォルトのページテンプレートが選択されている場合にのみ、投稿サムネイルのメタボックスを表示しています。

(function($){
$(document).ready(function() {

    var $page_template = $('#page_template')
        ,$metabox = $('#postimagediv'); // For example

    $page_template.change(function() {
        if ($(this).val() == 'default') {
            $metabox.show();
        } else {
            $metabox.hide();
        }
    }).change();

});
})(jQuery);

そして、楽しみのために、同じスクリプトのより短く、より冗長なバージョンを以下に示します。

(function($){
$(function() {

    $('#page_template').change(function() {
        $('#postimagediv').toggle($(this).val() == 'default');
    }).change();

});
})(jQuery);

わぁ、ありがとう!近日中にこれをテストし、それに応じて報告します。
ジョナサンウォルド

とても素晴らしい...これは私が必要としていたものです。私にとって完璧に働いた。ありがとうございました!!!
ロス

申し訳ありませんが、私は本当にjavascriptの初心者であり、必要なものがあることを知っていますが、正しい方法で物事を行うことができないようです... javascriptファイルを変更する必要があります。;)

1

jQueryでメタボックスを非表示にするためだけにレンダリングするのではなく、これを使用できます。唯一の違いは、ドロップダウンフィールドを変更した後、メタボックスを非表示/表示するには[更新]を選択する必要があることです。

function add_meta_box() {
    global $post;
    if(!empty($post)) {
        $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);

        if($pageTemplate == 'your-page-template-here.php' ) {
            add_meta_box( $id, $title, $callback, 'page', $context, $priority, $callback_args );
        }
    }
}
add_action( 'add_meta_boxes', 'add_meta_box' );

必要に応じて6行目と7行目を更新します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.