WP Yönetici bölümünde belirli bir sayfada olup olmadığınızı nasıl kontrol edebilirsiniz? Örneğin, Kullanıcılar> Profil sayfamda olup olmadığımı nasıl kontrol edebilirim?


32

Bir eklenti yapıyorum ve yönetici kafasına javascript bitleri eklemek istiyorum, ancak yalnızca belirli yönetici sayfaları için. Kendi oluşturduğunuz bir WordPress sayfasındaki gibi sayfalar değil, 'Profiliniz', 'Kullanıcılar' vb. Gibi varolan yönetici bölümü sayfaları demek istemiyorum. Bu görev için özel olarak bir wp işlevi var mı? Bakıyorum ve yalnızca boolean işlevini is_adminve eylem kancalarını bulabiliyorum ama sadece kontrol eden bir boolean işlevini bulamıyorum .


1
Nazikçe dürtmek size bir cevap kabul edilmediğini hatırlatır. Verilen cevapların hiçbiri sorunuzu yeterince cevaplamıyorsa veya verilen bilgileri anlamakta zorlanıyorsanız lütfen bize bildirin.
t31os

Yanıtlar:


24

Bunu yapmanın yolu, ihtiyacınız olan dosyaları sıraya koymak için 'admin_enqueue_scripts' kancasını kullanmaktır. Bu kanca, yüklenen geçerli sayfaya ilişkin bir $ hook_suffix dosyasından geçecek:

function my_admin_enqueue($hook_suffix) {
    if($hook_suffix == 'appearance_page_theme-options') {
        wp_enqueue_script('my-theme-settings', get_template_directory_uri() . '/js/theme-settings.js', array('jquery'));
        wp_enqueue_style('my-theme-settings', get_template_directory_uri() . '/styles/theme-settings.css');
        ?>
        <script type="text/javascript">
        //<![CDATA[
        var template_directory = '<?php echo get_template_directory_uri() ?>';
        //]]>
        </script>
        <?php
    }
}
add_action('admin_enqueue_scripts', 'my_admin_enqueue');

55

Şu anki sayfanın adını taşıyan $ pagenow adlı wp-admin dosyasında global bir değişken var , yani edit.php, post.php, vs.

Konumunuzu daha da daraltmak için $ _GET isteğini de kontrol edebilirsiniz, örneğin:

global $pagenow;
if (( $pagenow == 'post.php' ) && ($_GET['post_type'] == 'page')) {

    // editing a page

    }

if ($pagenow == 'users.php') {

    // user listing page

    }

if ($pagenow == 'profile.php') {

    // editing user profile page

    }

1
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }Örneğin, özel bir tema ayarları sayfasında olup olmadığınızı kontrol eder admin.php?page=prefix-theme-settings.
lowtechsun

19

En kapsamlı yöntem get_current_screenWordPress 3.1'e eklenmiştir.

$screen = get_current_screen();

döner

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)

3
"Kullanım Kısıtlamaları - Bu işlev çoğu yönetici sayfasında tanımlanır, ancak hepsinde değil. Bu nedenle is_admin () işlevinin doğru döneceği durumlar vardır, ancak get_current_screen () öğesini çağırmaya çalışmak ölümcül bir hataya neden olur çünkü tanımlanmadı. Bilinen örnek wp-admin / customize.php 'dir. admin_init kancasından çağrıldığında işlev null değerini döndürür. current_screen gibi daha sonraki bir kancada kullanılması uygun olmalıdır. "- Kodeks .
Brezilyalı Adam

@ThatBrazilianGuy Hızlı bir kontrol, bunun artık durum olmadığını, gördüğüm kadarıyla get_current_screen()tüm yönetici sayfalarında kullanmanın güvenli olduğunu gösteriyor.
shahar

1
@ shahar, yukarıda belirtilen dokümantasyona ve deneyimlerime göre, durum böyledir.
fabrikası

9

Yukarıdaki soruya alternatif bir yöntem / yaklaşım sunmak.

// When you are viewing the users list or your editing another user's profile
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );

// When you are editing your own profile
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );

function your_enqueue_callback() {
    wp_enqueue_script( .. YOUR ENQUEUE ARGS .. );
}

Bu yöntem, belirli sayfaları daha doğrudan hedefler ve geri çağrınızın içinde koşullu mantığa ihtiyaç duymaz (bu seçimi zaten seçili kancada yaptınız).


Keşke bu cevabın neden daha fazla oy alamadığını, söz konusu soruya tam cevap verdiğini ve çözümü en az miktarda kodla sağladığını bilsem. Geribildirim iyi olurdu ..
t31os

3

Add_menu_page işlevinin yalnızca bu sayfalarda belirli eylemleri yapmak için kullanabileceğiniz bir eylem kancası döndürdüğünü kimse söylememesinin garip olduğunu düşünüyorum.

$hook = add_menu_page($menu_title, $page_title, $capability, $slug, $function, $icon_url, $position);
add_action( 'load-' . $hook, 'my_admin_enqueue_scripts' );
function my_admin_enqueue_scripts() {
    wp_enqueue_script(/*...*/);
    wp_enqueue_style(/*...*/);
}

$ Hook'a ihtiyacınız varsa ve menü sayfasını kendiniz eklemediyseniz, doktor burada.

Örneğin, bir üst seviye menü sayfasının kancası

yük toplevel_page_ $ MenuSlug

Alt menü sayfasının kancası

yüke $ MenuSlug_page_ $ SubMenuSlug

Bu mantığı takiben, kullanıcının profil sayfasının kancası

Yük users_page_profile

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.