Como eu sei o tipo de post atual quando estou post.php em admin?

9

Estou tentando fazer algo com um gancho admin_init se - e somente se - o usuário estiver editando um post (post.php) com o tipo de postagem "event". Meu problema é que, mesmo que o wordpress aponte para uma variável global, chame $ post_type. se eu fizer:

global $post_type;
var_dump($post_type);

Ele retorna NULL.

mas se eu fizer isso:

global $pagenow;
var_dump($pagenow);

retorna minha página atual. ou seja, "post.php".

Eu olhei para essa função $screen = get_current_screen(); , mas isso não foi declarado até que os ganchos admin_init tenham sido executados, e então é tarde.

Então, minha pergunta é: como eu, quando o admin_init é executado, descubro qual tipo de postagem a postagem atual está sendo editada. se o URL for post.php?post=81&action=edit , como sei qual é o tipo de postagem postid = 81?

Obrigado Malthe

    
por Malibur 04.07.2014 / 14:46

2 respostas

16
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    // if the post type is 'event' do something
    if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
        // Do something
    }
}
    
por MiCc83 04.07.2014 / 15:15
0

Eu vou expandir a resposta do MiCc83. Existem algumas coisas que não seguem as perguntas originais do OP, mas no geral é uma ótima solução. Por exemplo, não funcionaria com um evento post_type porque você está verificando o post_type como 'post' na resposta.

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    if ( 'post.php' === $pagenow && isset($_GET['post']) ){
        $post_id = $_GET['post'];

        // Do something with $post_id. For example, you can get the full post object:
        $post = get_post($post_id);

    }
}

A condição 'post' === get_post_type( $_GET['post'] ) na resposta anterior impediria que isso funcionasse em um tipo de post 'event'. Você precisaria verificar o tipo de postagem 'event' em vez de 'post'.

    
por MxmastaMills 26.03.2018 / 03:42