投稿とページ読み込みのフック


17

特定の投稿またはページが読み込まれたときに関数を実行する必要があります。ページの読み込み中に投稿が表示されているかどうかを確認できるフックはありますか?


パブリックまたは管理者側/フェーシング?
カイザー

フロントエンド用。基本的に、特定の単一のカスタム投稿タイプが表示されたときにのみトリガーするようにします。
ポロミナグ

回答:


24

wpフックを使用して、global $wp_queryオブジェクトまたは任意の条件を確認できます。

add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
    if (
        'special_cpt' === get_post_type()
        AND is_singular()
    )
        return print "Yo World!";

    return printf(
        '<p>Nothing to see here! Check the object!<br /></p><pre>%s</pre>',
        var_export( $GLOBALS['wp_query'], true )
    );
}

参照:wpcodex.wordpress.orgおよびwpdeveloper.wordpress.org


「wp」フックはいつ実行されるのか教えてください。
ポロミナグ

A)after_setup_themeandの前に実行されるsetup_themeため、プラグインのみがアクセス可能B)insideはWP :: main()、wp-settings.php内から呼び出されます。
カイザー

1
@kaiser wpフックはafter_setup_themeフックの直後および直前に起動しないtemplate_redirectためwp、テーマおよびプラグインからアクセス可能になりませんか?(明確にするだけ?)
アダムアダム

13

template_redirectテンプレートをレンダリングする前に起動するアクションフックを使用します。

add_action('template_redirect', 'hooker');
function hooker(){
    //I load just before selecting and rendering the template to screen
}

@PoulomiNag問題ありません。上の答えが見つかりました。1つの小さなメモはフックのwp後に実行されることだと思うafter_theme_setupので、プラグインだけでアクセスできないため、テーマで安全に使用できます。
アダム

私はちょうどチェックし、はい; wp後に実行されafter_theme_setupます。しかし、プラグインには必要です。だから、wpだけでなく、template_redirect私のために、両方の作業罰金。ここで2つの答えを受け入れてほしい!:)
Poulomi Nag

大丈夫です、両方を受け入れる必要はありませんが、単に発射する順序を明確にしたかっただけです。私がおかしくないことを確認してください。プラグインを使って頑張ってください...
アダム

1

(カスタム投稿ではなく)ページ上のカスタムメタボックスを読み込むために、次のコードを頻繁に使用しました。

    add_action('admin_init','how_we_do_it_meta');

    function how_we_do_it_meta() {

        if ( $_SERVER['SCRIPT_NAME'] == '/wp-admin/post.php' ) {

            $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
            $template_file = get_post_meta($post_id,'_wp_page_template',TRUE);

            if ($template_file == 'page-how-we-do-it.php') {

                add_meta_box('how_we_do_it_who-meta', 'Who we work with...', 'how_we_do_it_who', 'page', 'normal', 'high');

                add_action('save_post', 'save_how_we_do_it_meta');

            }
        }
    }

ありがとう、ダロンツ。しかし、ページの読み込み中にフロントエンドで動作するフックが必要です。何か案は?
ポロミナグ

上記を変更した場合to add_action('init', // etc)、adminセクションだけでなくページの読み込みでも機能します。
darronz

2
@darronz フックは両側で実行される! is_admin()ため、内部を確認する必要がありますinit
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.