web-dev-qa-db-ja.com

生のHTMLページを表示する方法(WordPressテーマ、スクリプトなどを迂回する)

私は何百ものページを持つWordPressサイトのソフトウェアエンジニアです、そしてそれはとてもうまくいっています。

ただし、WordPressシステムからの/ interference(テーマなし、スタイルなし、JavaScriptなしなど)を使用してno対話を使用して自分のページをコーディングできるようにしたいというケースがいくつかあります。同じサブドメインにあります。

https://example.com/special-page内のどこかにアップロードされたHTMLファイルを表示するように/wp-content/を設定するにはどうすればよいですか?

そして、おまけとして、それがPHPファイル(これはHTMLを生成するでしょう)でも動作するのであれば私は大好きです。

手動で.htaccessファイルを編集せずにこれを行いたいのですが。

これが近付く例です:

LeadPages WordPressプラグイン は、私が望んでいるもののバリエーションをしているようです。ユーザーは "slug"(special-pageなどの相対パス)とそこに表示するコンテンツを指定できます。しかし、明らかにこのプラグインを使用するには、コンテンツをLeadPages.netでホストする必要があります。

LeadPages plugin 

私がやりたいことは、私のサーバー上のどこかに(例えば/wp-content/のような公にアクセス可能なフォルダーに)自分のHTMLファイルをホストし、それからそれへの特定の相対パスポイントを持つことです。

私が手動で編集した.htaccessファイルを見てください(そしてそれは私が望むように動作します):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
DirectoryIndex /wp-content/raw/book-sale.html [L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^thanks$ /wp-content/raw/book-opt-in-thank-you.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

私はWordPressの管理者から、サイトのルート(/)に/wp-content/raw/book-sale.htmlの内容を表示し、/thanks/wp-content/raw/book-opt-in-thank-you.htmlを表示するように指定できれば良かったでしょう(.htaccessファイルを編集する必要はありません)。直接。

5
Ryan

子テーマを作成してPHPファイルをそこに入れても構わないと思っている場合、このアプローチは比較的きれいです。ファイルごとに、使用するパスとロードするファイル名を指定した書き換え規則を作成します。以下の例では、/custom-path/はあなたの子テーマディレクトリのルートからcustom-file.phpをロードし、/custom-path-2/custom-file-2.phpをロードします。書き換えを追加した後にパーマリンクをフラッシュすることを忘れないでください。

/*
 * Set up a rewrite for each path which should load a file.
 */
function my_standalone_rewrites() {
    add_rewrite_rule( '^custom-path/?', 'index.php?standalone=custom-file', 'top' );
    add_rewrite_rule( '^custom-path-2/?', 'index.php?standalone=custom-file-2', 'top' );
}
add_action( 'init', 'my_standalone_rewrites' );

/*
 * Make `standalone` available as a query var.
 */
function my_query_vars( $vars ) {
  $vars[] = 'standalone';
  return $vars;
}
add_filter( 'query_vars', 'my_query_vars' );

/*
 * If `standalone` is set when parsing the main query, load the standalone file.
 */
function my_standalone_path( &$wp_query ) {
    if ( $wp_query->is_main_query() && get_query_var( 'standalone', false ) ) {
        // Load filename.php from your child theme root.
        get_template_part( get_query_var( 'standalone' ) );
        exit;
    }
}
add_action( 'parse_query', 'my_standalone_path' );
1
Scott Nelle

スラッグを付けてページを作成し、出力するHTMLパスを指定するカスタムフィールドを追加することができます(この例では、メタキーとしてhtmlfilepathまたはhtmlurlを使用します)。

add_action('wp','maybe_direct_html_output');

function maybe_direct_html_output() {
    if (is_singular()) {
        global $post;
        $htmlfilepath = get_post_meta($post->ID,'htmlfilepath',true);
        if ( ($htmlfilepath) && (file_exists($htmlfilepath)) ) {
            echo file_get_contents($htmlfilepath); exit;
        }
        $htmlurl = get_post_meta($post->ID,'htmlurl',true);
        if ($htmlurl) {
            $html = wp_remote_get($html);
            if (!is_wp_error($html)) {echo $html['body']; exit;}
        }
    }
}

そのため、.htaccessを使用する必要はありません。wp-contentを使用する必要があることに気付いたので、相対パスを使用し、これを(htmlfileメタキーを使用)に単純化できます。

add_action('wp','maybe_direct_html_output');

function maybe_direct_html_output() {
    if (is_singular()) {
        global $post;
        $htmlrelpath = get_post_meta($post->ID,'htmlfile',true);
        if (!$htmlrelpath) {return;}
        $htmlfilepath = WP_CONTENT_DIR.$htmlrelpath;
        if (!file_exists($htmlfilepath)) {return;}
        echo file_get_contents($htmlrelpath); exit;
    }
}

WP_CONTENT_DIRには末尾のスラッシュがないので、/raw/book-sale.htmlのようにページの相対パスカスタムフィールド値を入力します。

0
majick