Wordpress admin'de Yeni sayfa / posta / CPT ekle veya sayfa / yazı / CPT ekle seçeneğinde olup olmadığımızı nasıl belirleyebiliriz?


18

Bu basit bir şey gibi görünüyor ama geçerli ekran Yeni Ekle veya Düzenle (wordpress admin koşullu etiket bir tür) için olup olmadığını belirlemek için bir yol gerekir . Bunun için zaten yerleşik bir işlev var mı, ya da ... nasıl başarılacağına dair bir fikir var mı?

Yanıtlar:


30

İşte sahip olduğum bir işlev:

/**
 * is_edit_page 
 * function to check if the current page is a post edit page
 * 
 * @author Ohad Raz <admin@bainternet.info>
 * 
 * @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' ) );
}

Kullanımı , diğer koşullu etiketler gibi basittir, birkaç örnek:

yeni sayfayı kontrol et veya sayfayı düzenle:

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

yeni gönderi sayfasını kontrol et:

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

yazı sayfasını düzenle için kontrol et:

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

$typenowbelirli bir yazı türü düzenleme sayfası olup olmadığını kontrol etmek için bunu bir global ile birleştirin :

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
}

12
Teşekkürler Alternatif olarak $ global_screen başka bir küresel değişken bulundu. global $ current_screen; if ($ current_screen-> post_type == 'CPT' && $ current_screen-> action == 'add') {// görev}
Dipesh KC

1
+1 Tek yönetici koşulunun is_admin;) olduğunu düşündüm . Dahası var mı?
kaiser

0

Çok get_current_screen()daha basit olduğu için tercih ederim :

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

Bu işlev, diğer veri noktalarının yanı sıra ekranın kimliğini, tabanını, posta türünü ve sınıflandırmasını içeren bir nesne döndürür.

( Kodeks )


0

Sadece belirli yazı tipi ekranlarda enqueue scriptve istedim . Verilen ekranda olup olmadığını kontrol etmek için bir işlev oluşturdu .stylesnew/editedit/new-postCPT

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

işlevi kullanmak için yazı türü adını iletin.

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

0

bu işleve sahibim

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

düzenleme sayfasında true, diğer sayfalarda false döndüren ...

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.