web-dev-qa-db-ja.com

どうやってphpファイルを任意のスラッグに添付してもwp-core関数にアクセスすることができますか?

ここで見つかった例およびその他のいくつかに基づいて、Wordpressコアにアクセスしながら、特定のURLからWordpress以外のページをロードしようとしています。

私はtemplate_redirectアクションにフックするための次のコード(期待通りに動作するようです)を持っています:

function templateRedirect() {
    global $wp;
    if ( $wp->query_vars['pagename'] == 'nlm-admin-thumbnail' ) {
        global $wp_query;
        // if we have a 404 status
        if ($wp_query->is_404) {
            // set status of 404 to false
            $wp_query->is_404 = false;
            $wp_query->is_archive = true;
        }
        // change the header to 200 OK

        header("HTTP/1.1 200 OK");
        //load our template
        include( dirname( __FILE__ ) . '/thumbnail.php' );
        exit;
    }
}

add_action('template_redirect', 'templateRedirect');

私の問題はthumbnail.phpのコードを実行するときに起こります。このファイルはウェブページのサムネイルをダウンロードして生の画像を出力することになっています。 nlm-admin-thumbnail slugは画像タグのsrcとして使用されます。

Thumbnail.phpを実行すると、undefined function some_wp_function()を取得し続けます。 wp-includesフォルダからhttp.phpとclass-http.phpをインクルードしました。これらを含めたので、次のエラーはundefined function apply_filters()です。

この方法でphpファイルをロードしてもwpコアにアクセスできませんし、apply_filers()にアクセスできないはずですか?

1
Chris Strutton

私はこれをかなり定期的に行っており、WordPressコアで関数を使用しても問題ありません。ただし、少し早くフックして404ビットとヘッダービットをスキップすることもできます。 functions.php内:

function wpa88013_parse_query( $wp ){
    if ( 'nlm-admin-thumbnail' == $wp->query_vars['pagename'] ) {
        include( dirname( __FILE__ ) . '/thumbnail.php' );
        exit;
    }
}
add_action( 'parse_query', 'wpa88013_parse_query' );

そしてthumbnail.phpのいくつかのサンプルコード:

<?php
$content = "foo\n\nbar";
echo apply_filters( 'the_content', $content );

$post_id = 1;
echo get_the_post_thumbnail( $post_id );

私はちょうど12のテーマでこれをテストしました、そしてそれは予想通りに動作します。

2
Milo