Làm cách nào để xác định xem chúng tôi đang thêm trang / bài đăng / CPT mới hay trong trang chỉnh sửa / bài đăng / CPT trong quản trị wordpress?


18

Điều này có vẻ như là điều đơn giản nhưng tôi cần cách để xác định xem màn hình hiện tại là cho Thêm mới hay Chỉnh sửa (một loại thẻ điều kiện quản trị wordpress). Đã có chức năng tích hợp sẵn cho việc này chưa, hoặc ... có ý tưởng nào để thực hiện không?

Câu trả lời:


29

đây là một chức năng mà tôi có:

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

Cách sử dụng rất đơn giản giống như bất kỳ thẻ điều kiện nào khác, một vài ví dụ:

kiểm tra trang mới hoặc chỉnh sửa:

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

kiểm tra trang bài mới:

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

kiểm tra chỉnh sửa trang bài viết:

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

kết hợp điều này với $typenowtoàn cầu để kiểm tra trang chỉnh sửa loại bài đăng cụ thể:

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
Cảm ơn Ngoài ra, tôi đã tìm thấy một biến toàn cầu khác $ current_screen. toàn cầu $ current_screen; if ($ current_screen-> post_type == 'CPT' && $ current_screen-> action == 'add') {// task}
Dipesh KC

1
+1 Nghĩ rằng quản trị viên duy nhất có điều kiện là is_admin;). Có nhiều hơn không?
kaiser

0

Tôi thích get_current_screen(), vì nó đơn giản hơn nhiều:

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

Hàm này trả về một đối tượng bao gồm ID, cơ sở, loại bài đăng và phân loại của màn hình, trong số các điểm dữ liệu khác.

( Mật mã )


0

Tôi muốn enqueue scriptstyleschỉ trên new/editmàn hình loại bài cụ thể . Tạo một chức năng để kiểm tra nếu tôi đang ở trên edit/new-postmàn hình của cái đã cho 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;
    }
}

để sử dụng chức năng, vượt qua tên loại bài.

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

0

tôi có chức năng này

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

trả về true trong trang chỉnh sửa và false trên các trang khác ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.