Bagaimana cara menentukan apakah kita sedang menambahkan halaman baru / post / CPT atau di halaman edit / post / CPT di admin wordpress?

18

Ini sepertinya hal yang sederhana tetapi saya perlu cara untuk menentukan apakah layar saat ini adalah untuk Tambah Baru atau Edit (semacam tag kondisional admin wordpress). Apakah sudah ada fungsi bawaan untuk ini, atau ... ada ide bagaimana mencapainya?

Dipesh KC
sumber

Jawaban:

29

di sini adalah fungsi yang saya miliki:

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

Penggunaannya sederhana seperti halnya tag kondisional lainnya, beberapa contoh:

periksa halaman baru atau edit:

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

periksa halaman posting baru:

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

periksa edit halaman posting:

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

menggabungkan ini dengan $typenowglobal untuk memeriksa halaman edit jenis posting tertentu:

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
sumber
12
Terima kasih Atau saya menemukan variabel global $ current_screen. global $ current_screen; if ($ current_screen-> post_type == 'CPT' && $ current_screen-> action == 'add') {// task}
Dipesh KC
1
+1 Pikir satu-satunya syarat admin adalah is_admin;). Apakah masih ada lagi?
kaiser
0

Saya lebih suka get_current_screen(), karena jauh lebih sederhana:

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

Fungsi ini mengembalikan objek yang menyertakan ID layar, pangkalan, jenis posting, dan taksonomi, di antara titik data lainnya.

( Codex )

Orang Brasil itu
sumber
0

Saya ingin enqueue scriptdan styleshanya di new/editlayar jenis posting tertentu . Membuat fungsi untuk memeriksa apakah saya ada di edit/new-postlayar yang diberikan 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;
    }
}

untuk menggunakan fungsi ini, berikan nama jenis posting.

/**
 * 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
sumber
0

saya memiliki fungsi ini

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;
    }
}

yang mengembalikan true di halaman edit dan false di halaman lain ...

Ahmad Wael
sumber