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

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

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

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

Q&A

解決済

3回答

2651閲覧

get_adjacent_postについて

sutobu000

総合スコア6

WordPress

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

0グッド

0クリップ

投稿2017/01/14 08:08

###質問内容・get_adjacent_postについて
wordpressのsingle.phpの記事ページのページング(ページネーション)で疑問があります。

関数get_adjacent_postなんですが、

php

1get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy )

引数の$excluded_termsはページングの際に除外したいタームIDを入れることができます。

この$excluded_termsを除外ではなく、当てはまるタームIDを入れるようにしたいのです。

###試みたこと
ソースファイルであるwp-includes/link-template.phpからget_adjacent_postを編集を試みました。
以下の文が関係すると思いました。

php

1// Remove any exclusions from the term array to include. 2 $term_array = array_diff( $term_array, (array) $excluded_terms ); 3 $term_array = array_map( 'intval', $term_array ); 4 5 if ( ! $term_array || is_wp_error( $term_array ) ) 6 return ''; 7 8 $where .= " AND tt.term_id IN (" . implode( ',', $term_array ) . ")";

array_diffarray_intersectに変更してみたが、ページングのリンクは反応してくれませんでした。(次のページのurlを持ってこれなかった)

###やりたいこと
get_adjacent_postの引数の$excluded_terms
除外したいタームIDを入力するのではなく、
当てはまるタームIDを入力するようにしたいです。

除外ではなく、当てはまるものという風に変えたいです。

この問題を解決できる、解決法を知っていればご教授いただきたいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

除外ではなく、当てはまるものという風に変えたい

ということは、当てはまるデータしか表示していないということかな?と思ったのですが…。その場合、WP_Query や Pre_get_posts フィルターで適切処理していれば、普通にページネーションしそうな気がするのですが…。

投稿2017/01/15 11:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sutobu000

2017/01/17 04:28

`get_adjacent_post`で出来ないかなと興味本位で試したかったのです。 ですが、やはりコアファイルを触るのは上手くいかずじまいで、結局get_postsからページングを作る方が良さそうでした。 ご回答ありがとうございました。
guest

0

WordPressのコアファイルを直接変更することは推奨されていません。
それを承知された上で、以下をお読みください。

まったく試していませんが、下記あたりを変更すればいいような気がします。

検索対象のタームに$excluded_termsを追加

PHP

1// Remove any exclusions from the term array to include. 2//$term_array = array_diff( $term_array, (array) $excluded_terms ); 3$term_array = array_merge( $term_array, (array) $excluded_terms ); 4$term_array = array_map( 'intval', $term_array );

$excluded_termsのタームを除外している処理をコメントアウト

PHP

1/** 2 * Filters the IDs of terms excluded from adjacent post queries. 3 * 4 * The dynamic portion of the hook name, `$adjacent`, refers to the type 5 * of adjacency, 'next' or 'previous'. 6 * 7 * @since 4.4.0 8 * 9 * @param string $excluded_terms Array of excluded term IDs. 10 */ 11$excluded_terms = apply_filters( "get_{$adjacent}_post_excluded_terms", $excluded_terms ); 12/* 13if ( ! empty( $excluded_terms ) ) { 14 $where .= " AND p.ID NOT IN ( SELECT tr.object_id FROM $wpdb->term_relationships tr LEFT JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE tt.term_id IN (" . implode( ',', array_map( 'intval', $excluded_terms ) ) . ') )'; 15} 16*/

投稿2017/01/14 10:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sutobu000

2017/01/17 04:26

この方法を試してみましたが、上手いことページングが動いてくれませんでした… ページング関連の関数は多くて色々依存しているみたいですね… 今回は別の方法で解決させました。 ご回答、ありがとうございました。
guest

0

自己解決

###自己解決
結局コアファイルを触るのは上手くいかないことがわかりました。
結局解決法はget_postsで同じカテゴリーのIDを配列に入れて、get_the_IDで参照して隣接するIDを取得しページングを行うようにしました。

ご回答していただいた方々、ありがとうございました。

投稿2017/01/17 04:32

sutobu000

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問