Como eu sei o tipo de postagem atual quando post.php no admin?

11

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

global $post_type;
var_dump($post_type);

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é depois que os ganchos admin_init foram executados e, em seguida, é tarde demais.

Portanto, minha pergunta é: como faço para, no momento em que admin_init for executado, descobrir qual é o tipo de postagem que está sendo editada atualmente. se o URL for post.php?post=81&action=editentão, como sei que tipo de post é postid = 81?

Obrigado Malthe

Malibur
fonte
que tal global $post?
Sisir 04/07/2014
pós global não está disponível no gancho admin_init ainda
Malibur

Respostas:

21
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
    }
}
MiCc83
fonte
Ao editar uma postagem existente, o URL é '/wp-admin/post.php?post=81&action=edit'
Malibur
Allright corrigido agora ... mesmo que você tem que consultar o db para fazê-lo ...
MiCc83
11
Por favor, adicione uma explicação para o que seu código faz
Pieter Goosen
Uma resposta muito útil, mesmo em 2018!
LoicTheAztec
As respostas apenas de código não são muito úteis. Veja o comentário de @PieterGoosen acima, de ~ 5 anos atrás ....
random_user_name 27/03
0

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, ele 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 evento 'event'. Você precisaria verificar o tipo de postagem 'event' em vez de 'post'.

MxmastaMills
fonte