WordPressの質問です。

ものすごい初歩的な話で申し訳ないのですが、
サーバを以降するにあったて、ページのidが変わってしまうので、スラッグなどでリンクを貼り直したいのですが、どんな書き方か忘れてしまったので教えていただきたいです。

<a href="?page_id=88">こんな書き方だったので、このままだと、リンクが変わってしまいます。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/09/30 18:43:48
  • 終了:2012/10/06 05:13:56

ベストアンサー

id:rouge_2008 No.3

rouge_2008回答回数594ベストアンサー獲得回数3512012/10/01 01:24:41

ポイント100pt

WordPressループ中で使用する場合、「the_permalink()」あるいは「get_permalink()」が利用できます。
※パーマリンク設定がデフォルトの場合は「/page_id=**」のようなクエリ形式で、それ以外の場合はページのタイトル(※スラッグを設定している場合はスラッグが優先)でURLが出力されます。(※投稿の場合は、パーマリンク設定に合わせて年・月・日、記事ID等も出力されます。)


HTMLコード内では「the_permalink()」、PHPコード内では「get_permalink()」を利用するといいです。

<ul>
<li><a href="<?php the_permalink(); ?>">記事タイトル1</a></li>
...

<?php
echo '<ul>';
echo '<li><a href="' . get_permalink() . '">記事タイトル2</a></li>';
...
?>


※「the_permalink()」は出力まで実行してしまうので、PHPのecho等と合わせて利用するのは不向きです。先に出力されて目的の属性が空になる問題が発生します。(「get_permalink()」は取得するだけなので、echo等を利用しないと出力されません。)

・the_permalink()
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_permalink
・get_permalink()
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_permalink


【※追記※】

グローバルナビゲーションのメニューでしたら、通常は「wp_nav_menu()」を利用して表示しているようです。
URLはパーマリンク設定に合わせて出力されますので、リンクのコードを変更する必要はありません。(※PHPでダイナミックに出力しているので、設定を変更した場合も自動で適用されます。)

・管理画面の「外観」→「メニュー」で作成したメニューを指定して表示する場合

<header>
	<?php wp_nav_menu( array('menu' => '表示したいメニュー名') ); ?>
</header>

※利用しているテーマによっては、functions.phpで「add_theme_support('menus')」を実行して、ナビゲーションメニューのサポートを有効にする必要があるかもしれません。

・表示するメニューを管理画面の「外観」→「メニュー」で選択する場合

<header>
	wp_nav_menu( array( 'theme_location' => 'top_navi' )
</header>

※次のようにfunctions.phpでカスタムメニューを登録して置く必要があります。

register_nav_menu( 'top_navi', 'Top Navigation' );


カスタムメニューの利用方法は次のページを参考にしてください。
http://www.koikikukan.com/archives/2012/02/16-015555.php
http://www.koikikukan.com/archives/2012/02/17-015555.php

・テンプレートタグ/wp_nav_menu
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_nav_menu
・関数リファレンス/add_theme_support
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_theme_support


ループ内で「the_permalink()」あるいは「get_permalink()」を利用する場合、またはwp_nav_menu()等だけでなく、 wp_list_pages()やウィジェットを利用して表示する場合など、何れの方法でもパーマリンク設定が関係しています。
パーマリンク設定がデフォルトのままでは「p=**」のようなクエリ形式のURLになりますので、管理画面の「設定」→「パーマリンク設定」で任意のパーマリンクに変更してください。
※「数字ベース」など「%post_id%」を使用するパーマリンクだと、記事IDが使われますので、「投稿名」など「%postname%」を使用する設定にするといいです。
(「%postname%」を設定した部分は記事タイトルが使われます。スラッグを指定している場合は、記事タイトルに優先してスラッグが使われます。)
※「%postname%」を利用しないで投稿日時を利用する場合、「/%year%/%monthnum%/%day%/%hour%%minute%」のように最低限分単位まで指定しないと、同じ日に投稿があった場合に記事の判別ができなくなります。(※できれば秒まで指定するといいかもしれません。)

・パーマリンク設定
http://wpdocs.sourceforge.jp/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2/%E3%83%91%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%82%AF%E8%A8%AD%E5%AE%9A

ナビゲーションのメニュー以外にget_posts()等で自分でクエリを発行してループを作成する場合も、「the_permalink()」あるいは「get_permalink()」を利用してリンクURLを出力すると、パーマリンク設定に合わせて出力されるので便利です。

・テンプレートタグ/get_posts
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts

他2件のコメントを見る
id:snoopy_japan

パーマリンクで登録してみよと思います。

2012/10/06 05:13:32
id:rouge_2008

wp_nav_menu()を利用したメニュー表示になっていた(※パーマリンク変更だけで解決する記述になっていた)という事でしょうか?
スラッグを利用するには、パーマリンクの設定を「デフォルト」以外にする必要があります。
タイトル欄の下のパーマリンクの所に表示されている「パーマリンクの変更」ボタンが「編集」に変わりますので、そちらからスラッグを設定できます。(※右上の「表示オプション」で「スラッグ」にチェックを入れると、スラッグの入力欄が表示されますので、そちらから指定する事も可能です。)
※投稿の場合も「%postname%」を指定していれば、この部分だけスラッグに変更できます。

参考までに直接ページを指定してリンクURLを出力する場合の記述です。
ただ、これだとURLだけでなくページのデータをすべて取得していますし、カスタムメニューの方が便利ですので、そちらを利用するようにした方がいいと思います。

		<?php $page = get_page_by_title( 'Sample Page' ); ?>
		<?php echo '<a href="/' . esc_url($page->post_name) .'/">' . esc_html($page->post_title) . '</a>'; ?>


現在の状態で何か不明な箇所があるのでしたら、どの部分が不明なのか(何を知りたいのか)具体的に教えてください。
この質問での疑問点が解決したのでしたらいいのですが、何が分からないのか分からないと答えようがありませんので・・・

ちょっと確認してみましたが、投稿・固定ページ・メディア、メニューなどwp_postsに保存されるデータで、重複するIDのデータがない場合は、元のIDでインポートされるようです。
既に同じIDの何れかのデータが存在する場合は、IDが新しく割り振られてしまいます。
新規にインストールした直後の状態にインポートする場合はID変更の問題は起きないかもしれませんが、少し確認しただけで確実ではありません。
参考情報としてだけ一応お知らせします。

2012/10/06 06:06:03

その他の回答(3件)

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/09/30 19:04:41

ポイント50pt

phoMyAdminを使ってMySQLのデータを全部移行すれば、IDは変わらずに済みますよ。
http://lab.komadoya.com/blog/2011/02/server-transfer-guide-wp.php

id:snoopy_japan

スラッグにリンクって貼れなかったですか?

2012/09/30 19:06:16
id:pigmon88 No.2

pigmon88回答回数501ベストアンサー獲得回数252012/09/30 20:08:33

ポイント50pt

その書き方だとリンクは変わらないはずですが・・・いずれにせよ、一括で書き直したい場合は、sedというコマンドを使ったアプリでできます。

http://download.nifty.com/download/win/util/text/sed/

id:snoopy_japan

書き方変えたいわけではないんで、、

2012/10/05 03:32:48
id:rouge_2008 No.3

rouge_2008回答回数594ベストアンサー獲得回数3512012/10/01 01:24:41ここでベストアンサー

ポイント100pt

WordPressループ中で使用する場合、「the_permalink()」あるいは「get_permalink()」が利用できます。
※パーマリンク設定がデフォルトの場合は「/page_id=**」のようなクエリ形式で、それ以外の場合はページのタイトル(※スラッグを設定している場合はスラッグが優先)でURLが出力されます。(※投稿の場合は、パーマリンク設定に合わせて年・月・日、記事ID等も出力されます。)


HTMLコード内では「the_permalink()」、PHPコード内では「get_permalink()」を利用するといいです。

<ul>
<li><a href="<?php the_permalink(); ?>">記事タイトル1</a></li>
...

<?php
echo '<ul>';
echo '<li><a href="' . get_permalink() . '">記事タイトル2</a></li>';
...
?>


※「the_permalink()」は出力まで実行してしまうので、PHPのecho等と合わせて利用するのは不向きです。先に出力されて目的の属性が空になる問題が発生します。(「get_permalink()」は取得するだけなので、echo等を利用しないと出力されません。)

・the_permalink()
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_permalink
・get_permalink()
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_permalink


【※追記※】

グローバルナビゲーションのメニューでしたら、通常は「wp_nav_menu()」を利用して表示しているようです。
URLはパーマリンク設定に合わせて出力されますので、リンクのコードを変更する必要はありません。(※PHPでダイナミックに出力しているので、設定を変更した場合も自動で適用されます。)

・管理画面の「外観」→「メニュー」で作成したメニューを指定して表示する場合

<header>
	<?php wp_nav_menu( array('menu' => '表示したいメニュー名') ); ?>
</header>

※利用しているテーマによっては、functions.phpで「add_theme_support('menus')」を実行して、ナビゲーションメニューのサポートを有効にする必要があるかもしれません。

・表示するメニューを管理画面の「外観」→「メニュー」で選択する場合

<header>
	wp_nav_menu( array( 'theme_location' => 'top_navi' )
</header>

※次のようにfunctions.phpでカスタムメニューを登録して置く必要があります。

register_nav_menu( 'top_navi', 'Top Navigation' );


カスタムメニューの利用方法は次のページを参考にしてください。
http://www.koikikukan.com/archives/2012/02/16-015555.php
http://www.koikikukan.com/archives/2012/02/17-015555.php

・テンプレートタグ/wp_nav_menu
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_nav_menu
・関数リファレンス/add_theme_support
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_theme_support


ループ内で「the_permalink()」あるいは「get_permalink()」を利用する場合、またはwp_nav_menu()等だけでなく、 wp_list_pages()やウィジェットを利用して表示する場合など、何れの方法でもパーマリンク設定が関係しています。
パーマリンク設定がデフォルトのままでは「p=**」のようなクエリ形式のURLになりますので、管理画面の「設定」→「パーマリンク設定」で任意のパーマリンクに変更してください。
※「数字ベース」など「%post_id%」を使用するパーマリンクだと、記事IDが使われますので、「投稿名」など「%postname%」を使用する設定にするといいです。
(「%postname%」を設定した部分は記事タイトルが使われます。スラッグを指定している場合は、記事タイトルに優先してスラッグが使われます。)
※「%postname%」を利用しないで投稿日時を利用する場合、「/%year%/%monthnum%/%day%/%hour%%minute%」のように最低限分単位まで指定しないと、同じ日に投稿があった場合に記事の判別ができなくなります。(※できれば秒まで指定するといいかもしれません。)

・パーマリンク設定
http://wpdocs.sourceforge.jp/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2/%E3%83%91%E3%83%BC%E3%83%9E%E3%83%AA%E3%83%B3%E3%82%AF%E8%A8%AD%E5%AE%9A

ナビゲーションのメニュー以外にget_posts()等で自分でクエリを発行してループを作成する場合も、「the_permalink()」あるいは「get_permalink()」を利用してリンクURLを出力すると、パーマリンク設定に合わせて出力されるので便利です。

・テンプレートタグ/get_posts
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_posts

他2件のコメントを見る
id:snoopy_japan

パーマリンクで登録してみよと思います。

2012/10/06 05:13:32
id:rouge_2008

wp_nav_menu()を利用したメニュー表示になっていた(※パーマリンク変更だけで解決する記述になっていた)という事でしょうか?
スラッグを利用するには、パーマリンクの設定を「デフォルト」以外にする必要があります。
タイトル欄の下のパーマリンクの所に表示されている「パーマリンクの変更」ボタンが「編集」に変わりますので、そちらからスラッグを設定できます。(※右上の「表示オプション」で「スラッグ」にチェックを入れると、スラッグの入力欄が表示されますので、そちらから指定する事も可能です。)
※投稿の場合も「%postname%」を指定していれば、この部分だけスラッグに変更できます。

参考までに直接ページを指定してリンクURLを出力する場合の記述です。
ただ、これだとURLだけでなくページのデータをすべて取得していますし、カスタムメニューの方が便利ですので、そちらを利用するようにした方がいいと思います。

		<?php $page = get_page_by_title( 'Sample Page' ); ?>
		<?php echo '<a href="/' . esc_url($page->post_name) .'/">' . esc_html($page->post_title) . '</a>'; ?>


現在の状態で何か不明な箇所があるのでしたら、どの部分が不明なのか(何を知りたいのか)具体的に教えてください。
この質問での疑問点が解決したのでしたらいいのですが、何が分からないのか分からないと答えようがありませんので・・・

ちょっと確認してみましたが、投稿・固定ページ・メディア、メニューなどwp_postsに保存されるデータで、重複するIDのデータがない場合は、元のIDでインポートされるようです。
既に同じIDの何れかのデータが存在する場合は、IDが新しく割り振られてしまいます。
新規にインストールした直後の状態にインポートする場合はID変更の問題は起きないかもしれませんが、少し確認しただけで確実ではありません。
参考情報としてだけ一応お知らせします。

2012/10/06 06:06:03
id:snoopy_japan

個別ページへのリンクの書き方がききたいのですけど、、

id:fut573 No.4

fut573回答回数195ベストアンサー獲得回数542012/10/04 11:33:34

ポイント100pt

うーん。要するに質問者さんは移転後もリンクが死なないための手段としてスラッグへのリンクを検討していて、回答者さんたちは他の方法があるよと回答している状態でしょうか?
既にみなさんが指摘しているように、wordpressでサーバー移転をする時にはページidを変えないで移転する方法があります。
個別記事へのリンクの方法は a href="?p=88" というようにwordpressのデフォルトurlでリンクしてあげると、自動転送されます。これはパーマリンクの形式が変わっても有効です。
(現在のサーバーで、この書き方を試してみて、転送されるかどうか確認してみてください。多分大抵の環境ではちゃんと飛びます)
つまり、ページidを変更しない方法で移転をして、個別記事へのリンクはデフォルトurlの形式で張る方法なら、とりあえずリンクが外れること無く移転できるのではないかと思われます。
また、もし正規表現の知識があるのでしたら、wordpressの「redirection」というプラグインを使えば、現在のリンクを修正すること無く、プラグインの設定を一行書き換えるだけで、リンクを新URLに自動的に転送することが可能です。

他7件のコメントを見る
id:fut573

それでしたら、ダッシュボード→固定ページ→新規追加 から使いたい名前の固定ページを作成してみたら、 自然にスラッグがURLになるんじゃないかなと思います。

2012/10/06 02:31:39
id:snoopy_japan

ありがとございます、なんとかなりました。

2012/10/06 05:12:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません