WordPressの記事のURLの一覧を取得する方法



記事のURLの一覧を取得する

ブログを分割したので記事のURLが変更になった、カテゴリを変更してURLが変更になった、など、個別の記事ごとに元の記事のURLから新しい記事のURLへ301リダイレクトしたい時があります。301リダイレクトさせるプラグインもありますがアクセス制御ファイルの.htaccessにリダイレクトの設定を書いたほうが楽ちんです。

プラグイン(PHP)でリダイレクト処理させるよりも.htaccessで処理したほうが、PHPが動く前に処理されるので、多少なりとも、処理は速いです。

.htaccessにリダイレクト処理の記述をするために、投稿記事のURLの一覧を取得したいのですが、WordPressの関数で記事のURLの一覧を取得できる関数がないか調べてみたところ、ピッタリのものはありませんでした。ないときは作らないと仕方がありません。

SQLでリストを取得したかったんですが、記事のURLは内部で動的に生成されていて、SQLで取得するのは無理っぽいのであきらめました。

記事のURLの一覧を取得する関数を作る

作る関数の理屈は簡単です。WordPressで用意されているget_posts()関数ですべての記事の情報を取得し、そこから記事IDを収得、記事IDからget_permalink()関数を使ってURLを取得します。

get_all_links()という、すべての記事のURLを取得する関数を作ります。

$p = array();
で、get_posts()関数に渡す引数を作っています。

  • ‘posts_per_page’ => 300
    1ページに表示する行数です。デフォルトは「5行」のようです。今回のように全行数を指定したいときは何を指定したらいいのかわからなかったので、とりあえず「300」としてみました。
  • ‘offset’ => 0
    何行目から表示するかを指定します。行は「0行目」から始まるので、一番最初から表示させるときは「0」を指定します。
  • ‘post_type’ => ‘post’
    記事を取得するときは’post’を指定するようです。
  • ‘post_status’ => ‘publish’
    記事の状態(ステータス)を指定します。投稿済みの記事を取得したかったので、’publish’を指定しています。

$list = get_posts($p);
指定したパラメータを元に、投稿記事の情報を「オブジェクト」として取得しています。
参考URLテンプレートタグ/get posts

foreach ($list as $v) {}
取得したオブジェクトの要素の数だけ繰り返し処理を行います。

get_permalink($v->ID)
「$v->ID」で、記事IDを取得できます。これを引数にしてget_permalink()に渡してやると、記事のURLを取得できます。

しかし、ここで一つ問題が発生して、「http://~」から始まる文字列は、「リンク」であると判断して、「ブログカード」に変換するようになっています。このまま表示させても「ブログカードの一覧」が取得出来るだけです。

そこで、少しひねりを加えて、「http://~」から始まる文字列の行頭(一番最初の「h」)を、PHPのpreg_replace()関数を使ってHTMLエンティティ(h)に変換しています。これで「http://~」から始まる文字列をブログカードに変換されずに済みます。

このコードを子テーマの「function.php」に貼り付けて保存します。

記事でも固定ページでもいいので、下記のショートタグを貼り付けます。

これで、ズラズラっと、投稿記事のURL一覧が表示されます。

「写真愛好家」兼「週末Web随筆家」。ちっちゃい花を撮ることがめっちゃ大好き。愛機はCanon EOS Kiss X7。50mm単焦点レンズと60mmマクロレンズで小さな花を撮ることに喜びを感じています。 職業はWEBのシステム屋。「まろ」と呼んでいただけるとうれしいです。
いわゆる「画像直リンク」、画像の複製は固くお断りいたします。
スポンサーリンク
NO IMAGE
この記事が気に入ったら
いいねをお願いします!

最新記事をお届けします。

シェアしていただけるとうれしいです

フォローよろしくお願いします

関連記事



スポンサーリンク