管理者のpost.phpで現在の投稿タイプを知るにはどうすればよいですか?


11

ユーザーが投稿タイプ "event"の投稿(post.php)を編集している場合にのみ、admin_initフックで何かしようとしています。私の問題は、wordpressが$ post_typeを呼び出すグローバル変数を指しているにもかかわらずです。私が行った場合:

global $post_type;
var_dump($post_type);

NULLを返します。

しかし、これを行うと:

global $pagenow;
var_dump($pagenow);

現在のページを返します。すなわち「post.php」。

私はこの関数を調べました$screen = get_current_screen();が、それはadmin_initフックが実行されるまで宣言されず、その後に遅くなります。

だから私の質問は、admin_initが実行されるまでに、現在編集中の投稿の種類を調べるにはどうすればよいですか。URLがpost.php?post=81&action=editその場合、どの投稿タイプpostid = 81がどのようにしてわかるか?

ありがとうマルト


どうglobal $postですか?
Sisir 14

グローバルポストはまだadmin_initフックで利用できません
マリブール14

回答:


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

既存の投稿を編集する場合、URLは '/wp-admin/post.php?post=81&action=edit'です
Malibur

申し分なく修正されました...データベースにクエリを実行する必要がありますが
MiCc83

1
コードの説明を追加してください
Pieter Goosen

2018年でも非常に役立つ回答です。
LoicTheAztec 2018

コードのみの回答はあまり役に立ちません。参照@PieterGoosen上記commment、5年前〜から...
random_user_name

0

MiCc83の答えを詳しく説明します。OPの元の質問に従わない点がいくつかありますが、全体としては優れたソリューションです。たとえば、回答でpost_typeを 'post'としてチェックしているため、post_typeイベントでは機能しません。

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

    }
}

'post' === get_post_type( $_GET['post'] )前の回答の条件は、これが投稿タイプ「イベント」で機能しないようにします。「投稿」の代わりに「イベント」の投稿タイプを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.