web-dev-qa-db-ja.com

WordPressにPHPページを追加する方法

私は自分のPHPコードを実行するWordPressブログ用のカスタムページを作成したいと思いますが、その間にサイト全体のCSS /テーマ/デザインの一部を残します。

PHPコードはサードパーティのAPIを利用するでしょう(だから私は他のPHPファイルを含める必要があります)

これを達成するにはどうすればよいですか。

N.B. Wordpress APIと対話する必要は特にありません - 他の特定のPHPライブラリを含めること以外は、PHPコードに他の依存関係はありません。 WPページ。そのため、明らかにWP APIの習得を必要としない解決法があればそれが最善の方法です。

232
rutherford

あなたはAPIと対話したり、プラグインを使用する必要はありません。

まず、テーマフォルダ(post.phpの下)にpage.phpまたは/wp-content/themes/themename/を複製します。

新しいファイルの名前をtemplatename.phpに変更します(templatenameは新しいテンプレートの名前です)。新しいテンプレートを利用可能なテンプレートのリストに追加するには、新しいファイルの先頭に次のように入力します。

<?php
/*
Template Name: Name of Template
*/
?>

このファイルを(PHPを使用して)変更して、他のファイルまたは必要なものをすべて含めることができます。

WordPressブログに新しいページを作成すると、ページ編集画面の属性テンプレートドロップダウンが表示されます右側のウィジェット。新しいテンプレートを選択してページを公開します。

あなたの新しいページはtemplatename.phpで定義されたPHPコードを使うでしょう

ソース: https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-custom-page-templates-for-global-use

368
Adam Hopkinson

あなたがあなた自身の.phpファイルを作成し、404ヘッダなしでWordpressと対話し、あなたの現在のパーマリンク構造を維持したいなら、その1ページのテンプレートファイルの必要はありません。

<?php
    require_once(dirname(__FILE__) . '/wp-config.php');
    $wp->init();
    $wp->parse_request();
    $wp->query_posts();
    $wp->register_globals();
    $wp->send_headers();

    // Your Wordpress Functions here...
    echo site_url();
?>

これより後は、どんなワードプレス機能でも簡単に実行できます。また、これはあなたの.phpファイルがあなたのwp-config.phpファイルが置かれているあなたのワードプレスサイトのルートの中にあると仮定します。

Wordpressの関数を統合するためにこれがあなたが使うべきアプローチだと言っているので、これは私にとってはrequire_once(dirname(__FILE__) . '/wp-blog-header.php');を最も長い間使っていたのでPRICELESSの発見です。あなたにこのアプローチを使ってほしい。 https://codex.wordpress.org/Integrated_WordPress_with_Your_Website

私は多くの人がこの質問に答え、すでに受け入れられた答えを持っていることを知っていますが、あなたのワードプレスサイトのルート内(または技術的にあなたが望むサイト)に404ヘッダーなしでロード!

EDIT

ここでちょっとした更新です。 404ヘッダなしでwp-blog-header.phpを使う方法がありますが、これはあなたが手動でヘッダに追加することを必要とします、このような何かはあなたのwordpressのインストールのルートでうまくいくでしょう:

<?php
    require_once(dirname(__FILE__) . '/wp-blog-header.php');
    header("HTTP/1.1 200 OK");
    header("Status: 200 All rosy");

    // Your Wordpress Functions here...
    echo site_url();
?>

これをすべて更新するために、このアプローチに必要なコードは少し少なくなりますが、どちらを使用するかはあなた次第です。

25
Solomon Closson

私のような人なら、CMSに存在しないページでWordPressの機能を参照できるようにしたいことがあるでしょう。このように、それはバックエンド特有のままで、クライアントによって誤って削除されることはありません。

これは実際にはphp require()を使ってwp-blog-header.phpファイルをインクルードするだけで簡単です。

これは、クエリ文字列を使用して任意の投稿のFacebook OGデータを生成する例です。

http://example.com/yourfilename.php?1のようなリンクの例を見てください。ここで1はOGデータを生成したい投稿のIDです。

yourfilename.phpの内容は、ここでは便宜上、ルートWPディレクトリにあります。

<?php
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    $uri = $_SERVER['REQUEST_URI'];
    $pieces = explode("?", $uri);
    $post_id = intval( $pieces[1] );

    // og:title
    $title = get_the_title($post_id);

    // og:description
    $post = get_post($post_id);
    $descr = $post->post_excerpt;

    // og:image
    $img_data_array = get_attached_media('image', $post_id);
    $img_src = null;
    $img_count = 0;

    foreach ( $img_data_array as $img_data ) {
        if ( $img_count > 0 ) {
            break;
        } else {
            ++$img_count;
            $img_src = $img_data->guid;
        }
    } // end og:image

?>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=yes" />
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:description" content="<?php echo $descr; ?>" />
<meta property="og:locale" content="en_US" />  
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo site_url().'/your_redirect_path'.$post_id; ?>" />
<meta property="og:image" content="<?php echo $img_src; ?>" />
<meta property="og:site_name" content="Your Title" />
</html>

投稿の実際の画像、抜粋、およびタイトルを使用して、投稿の共有モデルを生成しました。

これを行うために特別なテンプレートを作成し、パーマリンク構造を編集することができましたが、それは1ページに必要なだけであり、クライアントがCMS内からそれを削除したくないので、これはよりきれいなオプションのようでした。


EDIT 2017:このアプローチは現在推奨されていません

2016年以降のWPインストールの場合、ページデータをブラウザに出力する前に含める追加パラメータについては、 https://stackoverflow.com/a/39800534/1958998 を参照してください。

13
DrewT

テンプレートページを作成するのが正しい答えです。これは、テーマフォルダ内に作成したページにこれを追加するだけです。

<?php
/*
Template Name: mytemplate
*/
?>

このコードを実行するには、バックエンドからページのテンプレートとしてmytemplateを選択する必要があります。

正しい詳細を得るためにはこのリンクを見てください https://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/

7
user5742826

WordPressテーマの外側にPHPページを追加する必要がある場合、答えは一切含まれていません。これがやり方です。

あなたはwp-load.phpをインクルードする必要があります。

<?php require_once('wp-load.php'); ?>

それから、あなたはそのページでどんなWordPress機能も使うことができます。

Adam Hopkinsonによって広く受け入れられている答えは、ページを作成するための完全に自動化された方法ではありません。ユーザーはWordPressのバックエンド(wp-adminダッシュ内)に手動でページを作成する必要があります。それに関する問題は、良いプラグインは完全に自動化されたセットアップを持つべきである、それは手動でページを作成することをクライアントに要求するべきではありません。

また、ここで広く受け入れられている回答のいくつかはWordPressの外に静的なページを作成することを含みます。そしてそれはテーマのヘッダーとフッターを達成するためにWordPress機能性のいくつかだけを含みます。その方法はいくつかのケースではうまくいくかもしれませんが、これはこれらのページをWordPressと統合することをそのすべての機能を含ませずにすることを非常に困難にすることができます。

私は最良の、完全に自動化されたアプローチはwp_insert_postを使用してページを作成し、それをデータベースに常駐させることであると思います。例とそれに関する偉大な議論、そしてどのようにしてユーザーが誤ってページを削除しないようにするかについてはここで見つけることができます: wordpress-automatically-creating-page

率直に言って、私はこのアプローチがこの人気のある質問に対する答えとしてまだ述べられていないことに驚いています(それは7年間投稿されています)。

1
Damian Green

My-page.phpという名前のページを作成し、テーマディレクトリの下に保存します。それでは、このphpファイルを編集して、ページ上部に次の行を書いてください。

<?php /* Template Name: My Page */ ?>

カスタムページ定義行の下にPHPコードを書くと、このファイル内の他のWPテンプレート関数を呼び出すことができます。

<?php require_once("header.php");?>のように始める

レイアウトの一貫性を保つために、ヘッダーとフッターを統合している方法は何でも。

これは私のページなので、WordPress管理者パネルからページを作成する必要があります。管理=>ページ=>新規追加の順に選択します。

カスタムページのコーディング方法によっては、ページタイトルを追加します。ページの本文(説明)も追加することができます。カスタムphpページに記載されている場合は、説明を完全にスキップすることができます。

右側にある[テンプレート]を選択します。ドロップダウンから[マイカスタムページ]を選択します。準備万端です! [wordpress] [1]によって作成されたスラッグ(パーマリンク)へ行き、ページを見てください。

1
ashish thakor

あなたはそのテンプレートファイルにあなたのphpコードを置いた後よりもテーマフォルダの中にテンプレートを作成することができます。

require_once(dirname(__FILE__) . '/wp-config.php');
$wp->init();
$wp->parse_request();
$wp->query_posts();
$wp->register_globals();
$wp->send_headers();
// Your Wordpress Functions here...
 echo site_url();
0
Mehul Soni

これを試して:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
0
Heena Patel

あなたはWordPressのプラグインAPIを調べたいと思うでしょう。これはWordPressの仕組みのさまざまな部分に "フック"したり "フィルタ"したりする方法を説明しているので、いつでもどこでもカスタムPHPコードを実行することができます。このフック、フィルタリング、そしてカスタムコードのオーサリングはすべてあなたのfunctions.phpファイルのどのテーマの中でも行うことができます。ハッピーコーディング:)

0
hsatterwhite

カスタムテンプレートファイルを作成し、そのテンプレートをページに割り当てること(承認された回答の例のように)とは別に、Wordpressがテンプレートのロードに使用するテンプレート命名規則(テンプレート階層)を使用する方法もあります。新しいページを作成し、そのページのスラッグをテンプレートfilenameに使用します(page- {slug} .phpという名前のテンプレートファイルを作成します)。 WordPressはこの規則に合うテンプレートを自動的にロードします。

0
Danijel

WordPressのPHPページをPage Templateフォルダのchild-themeに追加するための最良の方法。

WordPressでPage Templateを作成する方法。

template-custom.phpという名前のファイルを作成し、それを/wp-content/theme/my-theme/に入れます。

<?php
 /*
 * Template Name: Custom Template
 * Custom template used for custom php code display
 * @package   Portafolio WordPress Theme
 * @author    Gufran Hasan
 * @copyright Copyright templatecustom.com
 * @link      http://www.templatecustom.com
 */
?>
<?php get_header(); ?>
<?php
  //write code here

 ?>

<?php get_footer(); ?>

詳細はこちら

0
Gufran Hasan

WP APIを扱いたくないのであれば、Adamの答えが本当に最善の方法です。

もしあなたがAPIを扱おうと思っているのなら、WPにアクセスしながら、特定のURLやページを任意のPHPファイルを指すことを可能にする "template-redirect"フックにフックすることを勧めます。

0
Stephen R

現在のテーマに合わせてpage-mytitle.phpを作成し、ダッシュボードからページmytitleを作成するだけです。 URLでページを呼び出すと、page-mytitle.phpが表示されます。このphpファイルにhtmp、css、js wp-loop e.t.cを追加する必要があります(page-mytitle.php)。

0

新しいファイルの名前をtemplatename.phpに変更します(templatenameは、新しいテンプレートと呼びたいものです)。新しいテンプレートを利用可能なテンプレートのリストに追加するには、新しいファイルの先頭に次のように入力します。

このファイルを(PHPを使用して)変更して、他のファイルまたは必要なものをすべて含めることができます。

その後、WordPressブログに新しいページを作成すると、ページ編集画面の右側の[属性]ウィジェットに[テンプレート]ドロップダウンが表示されます。新しいテンプレートを選択してページを公開します。

0
Nirav Webbleu