Como determinar se estamos adicionando Nova página / post / CPT ou em editar página / post / CPT no wordpress admin?

18

Isso parece uma coisa simples, mas preciso determinar se a tela atual é para Adicionar novo ou Editar (uma espécie de tag condicional para administrador do wordpress). Já existe uma função integrada para isso, ou ... alguma idéia de como realizar?

Dipesh KC
fonte

Respostas:

29

Aqui está uma função que eu tenho:

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

Uso O uso é simples, como qualquer outra tag condicional, alguns exemplos:

verifique se há uma página nova ou editada:

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

verifique se há nova página de postagem:

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

verifique a edição da página de postagem:

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

combine isso com um $typenowglobal para verificar uma página de edição específica do tipo de postagem:

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
fonte
12
Obrigado Como alternativa, encontrei outra variável global $ current_screen. global $ current_screen; if ($ current_screen-> post_type == 'CPT' && $ current_screen-> action == 'add') {// task}
Dipesh KC
11
+1 Pensei que o único administrador condicional é is_admin;). Tem mais?
Kaiser #
0

Eu prefiro get_current_screen(), pois é muito mais simples:

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

Esta função retorna um objeto que inclui o ID da tela, base, tipo de postagem e taxonomia, entre outros pontos de dados.

( Codex )

Aquele cara brasileiro
fonte
0

Eu queria enqueue scripte stylessomente em new/edittelas específicas de tipo de postagem. Criou uma função para verificar se estou na edit/new-posttela do dado 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;
    }
}

Para usar a função, passe o nome do tipo de postagem.

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

eu tenho essa função

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

que retorna verdadeiro na página de edição e falso nas outras páginas ...

Ahmad Wael
fonte