質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

958閲覧

WordPressのページ送り(次の記事、前の記事)を投稿順ではなくカスタムフィールドの値で取得したい

unionbiz

総合スコア32

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/05/17 09:01

前提・実現したいこと

現在、ページ送りが投稿順で表示されているのですが、カスタムフィールドを使い記事に番号を振り分けたので番号順順に記事情報を持ってこれるようにしたいです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

<?php if(have_posts()): the_post(); ?> <?php if ( $prevPost = get_previous_post() ) { echo '<a href="' . get_permalink($prevPost->ID) . '">'; echo '<p class="left">PREV</p>'; echo '</a>'; } if ( $nextPost = get_next_post() ) { echo '<a href="' . get_permalink($nextPost->ID) . '">'; echo '<p class="right">NEXT</p>'; echo '</a>'; } ?> <?php endif; ?>

試したこと

「number」がカスタムフィールドの名前です

get_post_meta( get_the_ID(), 'number', true ) で現在の記事の番号は取得できたのですが、この後どうやって前後の記事を取得すれば良いのかで悩んでいます。良い方法があれば教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

<?php $current_ID = get_the_ID(); $args = array( 'post_type' => 'numbers', 'posts_per_page' => -1, 'meta_type' => 'NUMERIC', 'meta_key' => 'number', 'orderby' => 'meta_value', 'order' => 'ASC', 'fields' => 'ids', ); $nav_query = new WP_Query( $args ); $post_array = $nav_query->posts; wp_reset_postdata(); $current_index = array_search( $current_ID, $post_array ); if ( $current_index ) { $next_post_ID = $post_array[ $current_index + 1 ]; $prev_post_ID = $post_array[ $current_index - 1 ]; echo '<a href="' . get_permalink( $prev_post_ID ) . '"><p class="left">PREV</p></a>'; echo '<a href="' . get_permalink( $next_post_ID ) . '"><p class="right">NEXT</p></a>'; }?>

投稿2021/05/19 00:34

unionbiz

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

私なら、WP_Queryでソート基準とページ番号($_GETから受け取る)を指定してソートされた状態で取得し、
ページ番号をGETで指定するページネーションを自前で生成して出力するようなテンプレートを作ります。

投稿2021/05/18 11:38

yuki84web

総合スコア1857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unionbiz

2021/05/19 00:32

ご回答ありがとうございます。WP_Queryで解決しました。 ただ、2番目以降は次の記事、前の記事が表示されるのですが1番目だけ次の記事の取得ができませんでした。何か考えられる原因があれば教えていただきたいです。
unionbiz

2021/05/19 00:36

コードを自己解決で上げました、よければそちらでご確認ください
guest

0

一応get_previous_postやget_next_postのSQL文には
フィルタフックがかかってるので
SQL文を上書き、というようなやり方もあるんですが
当該箇所のリンクさえ変えられればいいのであれば
meta_queryが絡む場合get_previous_postやget_next_postは使わずに
get_postsでやった方が楽です

get_previous_postやget_next_postの結果を変えることで
当該箇所のリンクだけでなく管理画面での前後のページへのリンクや

<link rel="prev" .../>などの記述も変更したいということであれば 先述のフィルタフックでSQL文を上書きする形で

やり方についてはドキュメントやブログの記事を探したりするより
get_adjacent_postのコードを見た方が
どのようにSQL文を上書きすれば良いかがわかるかと思います

もしget_adjacent_postのSQL文の上書きの方向でやるなら
ソートはpost_metaではなくmenu_orderで行うような
仕様に変更した方が楽じゃないかと思います

投稿2021/05/18 09:32

KazuhiroHatano

総合スコア7819

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unionbiz

2021/05/19 00:26

ご回答いただきありがとうございます。 SQL文に関しては勉強不足ですので少し調べてみたいと思います。 ソートの仕方についても参考にさせて頂きます、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問