Seçilen sayfa şablonunu temel alarak yönetici meta kutusunu aç / kapat


18

Özel bir alan arabiriminin yalnızca belirli bir şablon belirli bir WordPress sayfasına atandığında gösterilmesini istiyorum.

Herhangi bir fikir?


'Canlı' olması gerekmiyorsa (ör. Sayfa şablonunu değiştirmek için meta kutunun görünmesi / derhal kaybolması gerekmez) bu ilgili soruya bakın: wordpress.stackexchange.com/questions/48611/…
Stephen Harris

@StephenHarris Yorum için teşekkürler. Kurulum "şablon başına" seçeneği içeren WPAlchemy MetaBox sınıfı ile gidiş yara.
Jonathan Wold

Yanıtlar:


22

Bu duruma yaklaşmanın en iyi yolu JavaScript kullanmaktır. Bu şekilde, seçilen değer her değiştiğinde, ilgili meta kutuyu anında gizleyebilir / gösterebilirsiniz.

Kullanım wp_enqueue_script()içinde functions.phpyönetici alanında özel bir JavaScript dosyası yüklemek için:

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 gerektiren betiğin kendisi, sayfa şablonu açılır listesindeki seçilen değere göre bir meta kutusunu gizler veya gösterir. Bu örnekte, varsayılan sayfa şablonunun seçilmesi durumunda yalnızca yazı küçük resimleri için meta kutuyu gösteriyorum:

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

Ve sadece eğlence için, aynı komut dosyasının daha kısa, daha az ayrıntılı bir sürümü:

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

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

});
})(jQuery);

Vay canına, teşekkür ederim! Bunu yakında bir test yapacağım ve buna göre rapor vereceğim.
Jonathan Wold

Çok güzel ... sadece ihtiyacım olan buydu. Benim için mükemmel çalıştı. Teşekkür ederim!!!
Ross

Üzgünüm ama javascript'te yeni başlayan biriyim ve ihtiyacım olan şeyleri biliyorum, ama görünüşe göre işleri doğru şekilde yapamıyorum ... Yani neyi anladığımdan emin değilim Javascript dosyasında değiştirmek zorunda .. Benim gibi bir nooby için daha fazla açıklama mümkün mü? ;)

1

Meta kutuyu yalnızca jQuery ile gizlemek için oluşturmak yerine bunu kullanabilirsiniz. Tek fark, meta kutunun gizlenmesinin / gösterilmesinin açılır alanı değiştirdikten sonra 'Güncelle' seçeneğini seçmesidir.

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. ve 7. satırları istediğiniz gibi güncelleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.