web-dev-qa-db-de.com

Wie können Sie überprüfen, ob Sie sich auf einer bestimmten Seite im Internet befinden? WP Admin-Bereich? Wie kann ich beispielsweise überprüfen, ob ich auf der Seite Benutzer> Ihr Profil bin?

Ich erstelle ein Plugin und möchte ein bisschen Javascript in den Admin-Kopf einfügen, aber nur für bestimmte Admin-Seiten. Ich meine nicht Seiten wie in einer WordPress-Seite, die Sie selbst erstellen, sondern bestehende Seiten im Admin-Bereich wie "Ihr Profil", "Benutzer" usw. Gibt es eine WP-Funktion speziell für diese Aufgabe? Ich habe gesucht und ich kann nur die Boolesche Funktion is_admin und Aktions-Hooks finden, aber keine Boolesche Funktion, die nur prüft.

32
racl101

Verwenden Sie dazu den Hook "admin_enqueue_scripts", um die benötigten Dateien in die Warteschlange zu stellen. Diesem Hook wird ein $ hook_suffix übergeben, das sich auf die aktuell geladene Seite bezieht:

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');
23
prettyboymp

In wp-admin gibt es eine globale Variable namens $ pagenow , die den Namen der aktuellen Seite enthält, dh edit.php, post.php usw.

Sie können auch die $ _GET-Anforderung überprüfen, um Ihren Standort weiter einzugrenzen. Beispiel:

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

    }
53
goldenapples

Die umfassendste Methode ist get_current_screen , die in WordPress 3.1 hinzugefügt wurde

$screen = get_current_screen();

kehrt zurück

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)
18
Louis-Rémi

Um eine alternative Methode/Herangehensweise an die obige Frage anzubieten.

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

Diese Methode zielt direkter auf bestimmte Seiten ab und vermeidet, dass in Ihrem Rückruf bedingte Logik erforderlich ist (da Sie diese Unterscheidung bereits im ausgewählten Hook vorgenommen haben).

9
t31os

Ich finde es seltsam, dass niemand erwähnt hat, dass die Funktion add_menu_page einen Aktions-Hook zurückgibt, mit dem Sie bestimmte Aktionen nur auf diesen Seiten ausführen können

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

Wenn Sie den $ -Hook benötigen und die Menüseite nicht selbst hinzugefügt haben, ist das Dokument hier

Zum Beispiel ist der Haken für eine Menüseite der obersten Ebene

load-toplevel_page_ $ MenuSlug

Der Haken für eine Untermenüseite ist

load- $ MenuSlug_page_ $ SubMenuSlug

Nach dieser Logik lautet der Haken für die Profilseite des Benutzers

load-users_page_profile

3
Tofandel