Comment déterminer si nous sommes dans une nouvelle page / publication / CPT ou dans une page / publication / CPT dans WordPress Admin?

18

Cela semble être une chose simple, mais j'ai besoin d'un moyen de déterminer si l'écran actuel est pour Add New ou Edit (une sorte de balise conditionnelle admin wordpress). Y a-t-il déjà une fonction intégrée pour cela, ou ... une idée de la façon d'accomplir?

Dipesh KC
la source

Réponses:

30

voici une fonction que j'ai:

/**
 * is_edit_page 
 * function to check if the current page is a post edit page
 * 
 * @author Ohad Raz <[email protected]>
 * 
 * @param  string  $new_edit what page to check for accepts new - new post page ,edit - edit post page, null for either
 * @return boolean
 */
function is_edit_page($new_edit = null){
    global $pagenow;
    //make sure we are on the backend
    if (!is_admin()) return false;


    if($new_edit == "edit")
        return in_array( $pagenow, array( 'post.php',  ) );
    elseif($new_edit == "new") //check for new post page
        return in_array( $pagenow, array( 'post-new.php' ) );
    else //check for either new or edit
        return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}

Utilisation l'utilisation est simple comme n'importe quelle autre balise conditionnelle, quelques exemples:

vérifier la nouvelle page ou la page d'édition:

if (is_edit_page()){
   //yes its an edit/new post page
}

vérifier la nouvelle page de message:

if (is_edit_page('new')){
   //yes its an new post page
}

vérifier la modification de la page de publication:

if (is_edit_page('edit')){
   //yes its an new post page
}

combinez cela avec un $typenowglobal pour vérifier une page d'édition de type de publication spécifique:

global $typenow;
if (is_edit_page('edit') && "Post_Type_Name" == $typenow){
   //yes its an edit page  of a custom post type named Post_Type_Name
}
Bainternet
la source
12
Merci Alternativement, j'ai trouvé une autre variable globale $ current_screen. global $ current_screen; if ($ current_screen-> post_type == 'CPT' && $ current_screen-> action == 'add') {// tâche}
Dipesh KC
1
+1 Je pensais que le seul administrateur conditionnel est is_admin;). Y en a-t-il plus?
kaiser
0

Je préfère get_current_screen(), car c'est beaucoup plus simple:

$screen = get_current_screen();
  if ($screen->base == "post") {
}

Cette fonction renvoie un objet qui inclut l'ID de l'écran, la base, le type de publication et la taxonomie, entre autres points de données.

( Codex )

Ce gars brésilien
la source
0

Je le voulais enqueue scriptet stylesuniquement sur des new/editécrans de type de publication spécifiques . Création d'une fonction pour vérifier si je suis à l' edit/new-postécran de la donnée CPT.

/**
 * Check if 'edit' or 'new-post' screen of a 
 * given post type is opened
 * 
 * @param null $post_type name of post type to compare
 *
 * @return bool true or false
 */
function is_edit_or_new_cpt( $post_type = null ) {
    global $pagenow;

    /**
     * return false if not on admin page or
     * post type to compare is null
     */
    if ( ! is_admin() || $post_type === null ) {
        return FALSE;
    }

    /**
     * if edit screen of a post type is active
     */
    if ( $pagenow === 'post.php' ) {
        // get post id, in case of view all cpt post id will be -1
        $post_id = isset( $_GET[ 'post' ] ) ? $_GET[ 'post' ] : - 1;

        // if no post id then return false
        if ( $post_id === - 1 ) {
            return FALSE;
        }

        // get post type from post id
        $get_post_type = get_post_type( $post_id );

        // if post type is compared return true else false
        if ( $post_type === $get_post_type ) {
            return TRUE;
        } else {
            return FALSE;
        }
    } elseif ( $pagenow === 'post-new.php' ) { // is new-post screen of a post type is active
        // get post type from $_GET array
        $get_post_type = isset( $_GET[ 'post_type' ] ) ? $_GET[ 'post_type' ] : '';
        // if post type matches return true else false.
        if ( $post_type === $get_post_type ) {
            return TRUE;
        } else {
            return FALSE;
        }
    } else {
        // return false if on any other page.
        return FALSE;
    }
}

pour utiliser la fonction, passez le nom du type de message.

/**
 * return true if 'edit' or 'new-post' screen of 'cpt_name' is opened
 */
if ( is_edit_or_new_cpt('cpt_name') ) {
    // do something
}
Aamer Shahzad
la source
0

j'ai cette fonction

if(!function_exists('is_post_edit_page')){
    function is_post_edit_page() {
        static $result = null;
        if ( $result === null ) {
            $result = false;
            if ( is_admin() ) {
                if (
                    empty( $_POST )
                    &&
                    isset( $_GET['action'] )
                    &&
                    $_GET['action'] === 'edit'
                    &&
                    isset( $_GET['post'] )
                ) {
                    // Display Edit Post page
                    $result = true;
                } elseif (
                    isset( $_POST['action'] )
                    &&
                    $_POST['action'] === 'editpost'
                    &&
                    isset( $_POST['post_type'] )
                    &&
                    isset( $_POST['post_ID'] )
                    &&
                    strpos( wp_get_referer(), 'action=edit' ) !== false
                ) {
                    // Submit Edit Post page
                    $result = true;
                }
            }
        }

        return $result;
    }
}

qui retourne vrai dans la page d'édition et faux dans les autres pages ...

Ahmad Wael
la source