web-dev-qa-db-ja.com

Wordpressの管理者に新しいページ/投稿/ CPTを追加するのか、編集ページ/投稿/ CPTを追加するのかを判断するにはどうすればよいですか?

これは簡単なことのように思えますが、現在の画面が Add New または Edit (一種のwordpress adminコンディショナルタグ)用かどうかを判断する方法が必要です。これのための組み込み関数はもうあるのでしょうか、それとも…どのようにして達成するのかという考えはありますか?

18
Dipesh KC

これが私が持っている関数です:

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

使い方 使い方は他のコンディショナルタグのように単純です。

新規ページまたは編集ページを確認します。

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

新しい投稿ページを確認します。

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

編集投稿ページを確認します。

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

これを$typenowグローバルと組み合わせて、特定の投稿タイプの編集ページを確認します。

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
}
29
Bainternet

私は get_current_screen() を好みます。

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

この関数は、画面のID、ベース、投稿タイプ、分類法などのデータポイントを含むオブジェクトを返します。

コーデックス

0

私はenqueue scriptstylesを特定のnew/editポストタイプスクリーン上でのみ欲しかった。指定されたCPTedit/new-post画面にいるかどうかをチェックする機能を作成しました。

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

この機能を使用するには、投稿タイプ名を渡します。

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