カスタムWordPressテーマを一から作成しようとしています。ご覧のとおり、私のテーマフォルダー内のファイル構造は、footer.php、header.php、index.php、about.php、contact.phpのようになります。
私はホームページ(index.php)を完成させましたそして今私はこれらの他のページを作成してそれらにリンクしようとしています。しかし、私が ホームページ からこれらのページに行くとき、私がそれらをリンクさせることができる唯一の方法はこの長くて醜いリンク構造を通してでした:
私はこれについて間違ったやり方をしたのではないかと思います。手動でFTPではなくWordPressで新しいページを作成した場合、パーマリンク構造を変更してnew.gatewaywebdesign.com/contact.php
の代わりにnew.gatewaywebdesign.com/wp-content/themes/gatewaywebdesign/contact.php
を持つことができますか?
私は先に進み、WordPressダッシュボードにcontact
ページを作成しようとしましたが、サイト名の後にindex.php
を削除することはできません。
リンク構造の編集/トリミングに関する他の提案はありますか?ありがとう
この質問に対する答えは「はい」です。WordPressでページを作成することでリンク構造を変更することができます。 index.php
が WordPressループ を使用するように修正し、それからフロントページがに設定されているものとしてフロントページを表示するようにしました。 WordPressダッシュボードそのため、私のindex.php
は、次のようになりました。
<?php get_header();?>
<?php if ( have_posts() ) : ?>
// Set front page
<?php if ( is_home() && ! is_front_page() ) : ?>
// Display page title
<header>
<h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
</header>
<?php endif; ?>
<?php
// Start the loop.
while ( have_posts() ) : the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'content', get_post_format() );
// End the loop.
endwhile;
// Previous/next page navigation.
/* the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'twentyfifteen' ),
'next_text' => __( 'Next page', 'twentyfifteen' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>',
) );*/
// If no content, include the "No posts found" template.
else :
get_template_part( 'content', 'none' );
endif;
?>
<?php get_footer();?>
テーマに必要なすべてのコアファイル(single.php
、content-link.php
、content-none.php
、content-page.php
、content-search.php
、content.php
、およびpage.php
)があることを確認してください。
次にWordPressでメニューを作成し、WordPressで作成したページをそのメニューに設定します。
header.php
で、ナビゲーションメニューのさまざまなページへのリンクを次のように設定します。
<div class="menu-container"><!--menu items-->
<?php $main_menu = inits_get_main_menu();
foreach ($main_menu as $menu) { //var_dump( $menu); exit; ?>
<div class="menu-item contact">
<a class="menu-link" href="<?php echo $menu->url; ?>">
<?php echo $menu->title; ?>
</a>
</div>
<?php } ?>
</div>
これであなたのメニューはヘッダに設定されました、そしてあなたが他のページへのリンクの一つをクリックすると、リンク構造はあなたが望むように見えるでしょう。
@Miloが彼の答えで述べたように、あなたは直接テンプレートファイルを呼び出すことはできないし、すべきではありません。これはセキュリティ上のリスクであり、WordPressのエンジンにアクセスできなくなるため、the_permalink
などの機能は使用できなくなります。
あなたのhome.php
またはあなたが望むところにテンプレート部分を含めるために、あなたはget_template_part()
を使うことができます:
get_template_part( 'relative/path/to/template' );
.php
を含めないでください。自動的に追加されます。そのため、あなたのabout.php
が/theme/my-theme/folder/
の内側にあり、あなたのhome.php
が/theme/my-theme/
の中にある場合、この関数を次のように使うべきです:
get_template_part( 'folder/about' );
どこにコードを使用しても、about.php
が含まれます。これであなたはあなたのabout.php
の中にWordPressへのフルアクセス権があり、どんな醜いURLも必要ありません。
ページを追加するには、page-whatever.php
という名前の空のphpファイルを作成します。それからヘッダに以下を追加してください。
<?php
/**
* This is the template for Pages
*
* @package YourPackage
*/
get_header();
get_template_part('path/to/portfolio');
これで、ページを追加しながら(ページテンプレートのドロップダウンメニューの下に)、新しいページテンプレートをバックエンドに表示できます。
テーマPHPファイルは、リンクされたり直接読み込まれたりすることはありません。コンテンツをデータベースに保存する管理インターフェイスを介してページを作成し、WordPressはリクエストの種類(アーカイブ、単一投稿、単一ページなど)に基づいて着信要求を適切なテーマファイルにマッピングします。どのテーマファイルがどのタイプのリクエストに使用されるかについての詳細は、 テンプレート階層 を参照してください。
パーマリンクに現れるindex.php
の問題は別です。通常は、完全な「プリティ」パーマリンク用にmod_rewrite
を有効にしたサーバーが必要です。今、あなたはPATHINFO、または "Almost Pretty"パーマリンクとして知られているものを手に入れました。それぞれの要件の詳細については、 パーマリンクの使用 ページを参照してください。
//site.com/contact/
に別のテンプレートを作成したい場合は、ページを作成し、このパーマリンクをそのページに設定して、page-contact.php
というテンプレートファイルを作成する必要があります。
それがWPのしくみです。
特定のテンプレート(page-contact.php
など)を検索します
一般的なテンプレートを検索します(例:page.php
、single.php
など)
index.php
を使う
それでそれが1stを見つけることができないならそれは2ndに行きそれからindex.php
に落ちます。 WPテンプレート階層がどのように構築されたか を見てください。