web-dev-qa-db-ja.com

ページリンク構造

カスタムWordPressテーマを一から作成しようとしています。ご覧のとおり、私のテーマフォルダー内のファイル構造は、footer.php、header.php、index.php、about.php、contact.phpのようになります。

enter image description here

私はホームページ(index.php)を完成させましたそして今私はこれらの他のページを作成してそれらにリンクしようとしています。しかし、私が ホームページ からこれらのページに行くとき、私がそれらをリンクさせることができる唯一の方法はこの長くて醜いリンク構造を通してでした:

enter image description here

私はこれについて間違ったやり方をしたのではないかと思います。手動でFTPではなくWordPressで新しいページを作成した場合、パーマリンク構造を変更してnew.gatewaywebdesign.com/contact.phpの代わりにnew.gatewaywebdesign.com/wp-content/themes/gatewaywebdesign/contact.phpを持つことができますか?

私は先に進み、WordPressダッシュボードにcontactページを作成しようとしましたが、サイト名の後にindex.phpを削除することはできません。

enter image description here

リンク構造の編集/トリミングに関する他の提案はありますか?ありがとう

1
HappyHands31

この質問に対する答えは「はい」です。WordPressでページを作成することでリンク構造を変更することができます。 index.phpWordPressループ を使用するように修正し、それからフロントページがに設定されているものとしてフロントページを表示するようにしました。 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.phpcontent-link.phpcontent-none.phpcontent-page.phpcontent-search.phpcontent.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>

これであなたのメニューはヘッダに設定されました、そしてあなたが他のページへのリンクの一つをクリックすると、リンク構造はあなたが望むように見えるでしょう。

0
HappyHands31

@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');

これで、ページを追加しながら(ページテンプレートのドロップダウンメニューの下に)、新しいページテンプレートをバックエンドに表示できます。

2
Jack Johansson

テーマPHPファイルは、リンクされたり直接読み込まれたりすることはありません。コンテンツをデータベースに保存する管理インターフェイスを介してページを作成し、WordPressはリクエストの種類(アーカイブ、単一投稿、単一ページなど)に基づいて着信要求を適切なテーマファイルにマッピングします。どのテーマファイルがどのタイプのリクエストに使用されるかについての詳細は、 テンプレート階層 を参照してください。

パーマリンクに現れるindex.phpの問題は別です。通常は、完全な「プリティ」パーマリンク用にmod_rewriteを有効にしたサーバーが必要です。今、あなたはPATHINFO、または "Almost Pretty"パーマリンクとして知られているものを手に入れました。それぞれの要件の詳細については、 パーマリンクの使用 ページを参照してください。

1
Milo

//site.com/contact/に別のテンプレートを作成したい場合は、ページを作成し、このパーマリンクをそのページに設定して、page-contact.phpというテンプレートファイルを作成する必要があります。

それがWPのしくみです。

  1. 特定のテンプレート(page-contact.phpなど)を検索します

  2. 一般的なテンプレートを検索します(例:page.phpsingle.phpなど)

  3. index.phpを使う

それでそれが1stを見つけることができないならそれは2ndに行きそれからindex.phpに落ちます。 WPテンプレート階層がどのように構築されたか を見てください。

1
KazeZlat