यदि आप WP एडमिन सेक्शन में किसी विशेष पेज में हैं तो आप कैसे देख सकते हैं? उदाहरण के लिए मैं कैसे जांच कर सकता हूं कि क्या मैं उपयोगकर्ताओं> आपके प्रोफ़ाइल पृष्ठ में हूं?


32

मैं एक प्लगइन बना रहा हूं और मैं व्यवस्थापक हेड में जावास्क्रिप्ट के बिट्स जोड़ना चाहता हूं, लेकिन केवल कुछ विशेष पृष्ठों के लिए। मेरा मतलब नहीं है कि आप एक वर्डप्रेस पेज में पेज बनाते हैं जो आप खुद बनाते हैं, लेकिन मौजूदा एडमिन सेक्शन पेज जैसे pages योर प्रोफाइल ’, there यूजर्स’ आदि, इस कार्य के लिए विशेष रूप से एक wp फंक्शन है? मैं देख रहा हूं और मैं केवल बूलियन फंक्शन is_adminऔर एक्शन हुक ढूंढ सकता हूं लेकिन बूलियन फंक्शन नहीं जो सिर्फ चेक करता है।


1
आपको जवाब याद दिलाने के लिए कोमल कुहनी से हलकान नहीं हुआ। यदि कोई भी उत्तर आपके प्रश्न का पर्याप्त रूप से उत्तर नहीं देता है या आप जानकारी को समझने के लिए संघर्ष कर रहे हैं, तो कृपया हमें बताए जाने के लिए टिप्पणी करें।
t31os

जवाबों:


24

इसका तरीका यह है कि आप जिन फ़ाइलों की ज़रूरत है उन्हें एन-कतार में करने के लिए 'admin_enqueue_scripts' हुक का उपयोग करें। यह हुक एक $ हुक_उस्फीक्स को पास करेगा जो लोड किए गए वर्तमान पृष्ठ से संबंधित है:

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

Wp-admin में एक ग्लोबल वैरिएबल है जिसे $ pagenow कहा जाता है जो वर्तमान पृष्ठ का नाम रखता है, अर्थात edit.php, post.php, आदि।

आप उदाहरण के लिए, अपने स्थान को और कम करने के लिए $ _GET अनुरोध भी देख सकते हैं:

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.. }उदाहरण के लिए जाँचता है कि क्या आप कस्टम थीम सेटिंग पेज पर हैं admin.php?page=prefix-theme-settings
लोटेकसून

19

get_current_screenवर्डप्रेस 3.1 में सबसे व्यापक विधि जोड़ी गई है

$screen = get_current_screen();

रिटर्न

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

3
"उपयोग प्रतिबंध - यह फ़ंक्शन अधिकांश व्यवस्थापक पृष्ठों पर परिभाषित किया गया है, लेकिन सभी नहीं हैं। इस प्रकार ऐसे मामले हैं जहां is_admin () सही लौटेगा, लेकिन get_current_screen () को कॉल करने का प्रयास एक घातक त्रुटि के रूप में होगा क्योंकि यह परिभाषित नहीं है। एक। ज्ञात उदाहरण WP-व्यवस्थापक / customize.php है अगर admin_init हुक से बुलाया समारोह रिटर्न शून्य यह ठीक में उपयोग करने के लिए किया जाना चाहिए एक बाद current_screen के रूप में इस तरह के हुक। "-।। कोडेक्स
वह ब्राजील के लड़के

@ThatBrazilianGuy एक त्वरित जाँच से पता चलता है कि यह अब ऐसा नहीं है, जहाँ तक मैं देख सकता हूँ get_current_screen()कि अन्य व्यवस्थापक पृष्ठों पर उपयोग करना सुरक्षित है।
शाहर

1
@शहर यह अभी भी मामला है, ऊपर दिए गए दस्तावेज और मेरे अनुभव के अनुसार।
फेब्रिक

9

उपर्युक्त प्रश्न के लिए एक वैकल्पिक विधि / दृष्टिकोण प्रदान करने के लिए।

// 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 .. );
}

यह विधि विशिष्ट पृष्ठों को अधिक सीधे लक्षित करती है और आपके कॉलबैक के अंदर सशर्त तर्क की आवश्यकता से बचती है (क्योंकि आपने पहले से ही चयनित हुक में यह अंतर कर दिया है)।


काश मुझे पता होता कि इस उत्तर को अधिक वोट क्यों नहीं मिले, तो सवाल में सटीक उपयोग के मामले को शामिल किया गया, और कोड की एक न्यूनतम मात्रा में समाधान प्रदान करता है। प्रतिक्रिया अच्छी होगी ..
t31os

3

मुझे यह अजीब लगता है कि किसी ने भी इस तथ्य का उल्लेख नहीं किया है कि add_menu_page फ़ंक्शन एक कार्रवाई हुक देता है जिसका उपयोग आप केवल उन पृष्ठों पर कुछ कार्यों को करने के लिए कर सकते हैं

$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(/*...*/);
}

यदि आपको $ हुक की आवश्यकता है और आपने मेनू पृष्ठ को अपने आप से नहीं जोड़ा है तो डॉक्टर यहाँ है

उदाहरण के लिए शीर्ष स्तर मेनू पृष्ठ के लिए हुक है

लोड toplevel_page_ $ MenuSlug

एक सबमेनू पेज के लिए हुक है

load- $ MenuSlug_page_ $ SubMenuSlug

उस तर्क के बाद, उपयोगकर्ता के प्रोफाइल पेज के लिए हुक है

लोड users_page_profile

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.