あ!すみません、var_dump( $args );
は要らないので消してください!
function custom_modify_related_posts_query( $args ) {
$args['orderby'] = 'date';
$args['order'] = 'DESC';
return $args;
}
add_filter( 'snow_monkey_related_posts_args', 'custom_modify_related_posts_query' );
下記だとどうですかね?
function custom_modify_related_posts_query( $args ) {
var_dump( $args );
$args['orderby'] = 'date';
$args['order'] = 'DESC';
return $args;
}
add_filter( 'snow_monkey_related_posts_args', 'custom_modify_related_posts_query' );
Olein_jpにご紹介いただきましたスレッド、にも記載されている、
snow_monkey_related_posts_args
のフックで解決できました。
ありがとうございます。
デフォルトでは AND 条件で一致するものが抽出されます。条件を変更したい場合は snow_monkey_related_posts_args
フィルターフックで変更できます。
【お使いの Snow Monkey のバージョン】バージョン: 14.0.4
【お使いの Snow Monkey Blocks のバージョン】
【お使いの Snow Monkey Editor のバージョン】
【お使いのブラウザ】
【当該サイトのURL】
### 実現したいこと
関連記事のクエリーとして新たに作成する。
– 記事に該当するメインカテゴリー(Yoast SEOを利用)より、最新の4記事のIDをget_postsを利用して取得
– opotionに保存した特定の記事ID2本文を先に取得した最新記事の2記事目と4記事目に混ぜ込みたい。
– snow_monkey_related_posts_args フックに掛ける関数にて上記の作業を行い、出来上がった6記事分のIDをpost__inにて$argに設定する。
### 発生している問題
snow_monkey_related_posts_args フックに掛ける関数にてget_postsを行っており、それが重複するということで、slow quaryとして検知された(Quary Monitor利用)。
### 試したこと
などを参考に
下記のコードで試したところ
add_filter(
'snow_monkey_related_posts_args',
function( $_args ) {
// 最大数の変更
var_dump('goge');
$_args[ 'posts_per_page' ] = 1;
return $_args;
}
);
添付画像のように、2回ver_dumpが実行された
たぶん、解決したと思うので、使ったコードを載せます。変なこと書いていないか自信がないので、できれば皆様のチェックを経てから本件はクローズにしたいと思います。よろしくお願いいたします。
/**
* 関連記事の関連付け条件をカテゴリー+タグ中で1つでも合致した場合にする
*
* @param array $args
* @return array
*/
add_filter(
'snow_monkey_related_posts_args',
function( $args ) {
if ( ! isset( $args['post_type'] ) || 'post' !== $args['post_type'] ) {
return $args;
}
$category_ids = wp_get_object_terms( get_the_ID(), 'category', [ 'fields' => 'ids' ] );
$term_ids = wp_get_object_terms( get_the_ID(), 'post_tag', [ 'fields' => 'ids' ] );
$tax_query[] = [
'relation' => 'OR',
[
'taxonomy' => 'post_tag',
'field' => 'term_id',
'terms' => $term_ids,
'operator' => 'IN', // 全てのタグが一致する場合。一つでも一致すれば良い場合は IN
],
[
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $category_ids,
'operator' => 'IN',
],
];
$args['tax_query'] = $tax_query;
return $args;
}
);
/** 関連記事の表示優先度を更新時間とする */
add_filter(
'snow_monkey_related_posts_args',
function( $_args ) {
$query_args['order'] = 'DESC';
$query_args['orderby'] = 'modified';
// 最大数の変更
$_args[ 'posts_per_page' ] = 12;
return $_args;
}
);
my snow monkeyに下記を加えてお試しください。
add_filter( 'snow_monkey_related_posts_args',
function( $_args ) {
// 最大数の変更
$_args[ 'posts_per_page' ] = 12;
return $_args;
}
);
関連記事に該当する記事件数が12件未満の場合は、必ずしも12件表示される訳では無いので、
最大数として12件表示する形となります。
もし、12件固定で出したい場合は関連記事として該当させる条件も変更する必要があるかもしれません。
その場合は再度返信などでご質問ください
【お使いの Snow Monkey のバージョン】v5.6.0
【お使いのブラウザ】Safari
【当該サイトのURL】https://not-wiz.net/
———-
どもー(笑)
ちょっと使い方に関してなんですが、
例えば、関連記事の最大数を変更したい場合と、記事一覧とは別にスタイルを変更したい場合って
下記のような形で書けば出来ると思うんですが、
function _load() {
add_filter(
'snow_monkey_related_posts_args',
[ __CLASS__, '_snow_monkey_related_posts_args' ]
);
add_filter(
'snow_monkey_get_template_part_template-parts/content/related-posts',
[ __CLASS__, '_related_posts' ],
10,
2
);
}
public static function _snow_monkey_related_posts_args( $_args ) {
if ( ! isset( $_args[ 'post_type' ] ) || 'post' !== $_args[ 'post_type' ] ) {
return $_args;
}
// 関連記事の最大数の変更
$_args[ 'posts_per_page' ] = 3;
return $_args;
}
public static function _related_posts( $_name, $_vars ) {
ob_start();
\Framework\Helper::get_template_part( 'template-parts/content/related-posts' );
$_html = ob_get_clean();
// 関連記事のスタイルをリッチメディアに変更
$_html = mb_ereg_replace(
'<ul class="c-entries c-entries--(rich-media|simple|text)">',
'<ul class="c-entries c-entries--rich-media">',
$_html
);
echo $_html;
}
何か微妙過ぎるやり方ですが、気にせず(笑)
それで、いちいちフックの中を変えるのも保守的にも微妙だったので、カスタマイザーを拡張しようと思ってます。
カスタマイザーの値は、これらの部分にget_theme_modで値を取ったのをこれらに上書きするようにすれば出来てはいます。
ただ、
アーカイブのカスタマイザー設定みたいに、投稿ページの時のみに該当のカスタマイザーを設定する方法と、
編集ボタンを押すと、追加しているカスタマイザー設定を表示する(関連記事の項目あたりに出したい)
ってのが解らないので、その使い方を質問させてください。(本題です)
rich_media、simple、text以外に項目を増やして、オリジナルスタイルを追加していくとかもカスタマイザー弄れば可能っぽいですが、この辺はあまり触らない方が良かったりしますかね…?
my-snow-monkey プラグイン、もしくは子テーマの functions.php に、条件を変更するコードを書くことで変更できます。
こんな感じでどうでしょう?
add_filter(
'snow_monkey_related_posts_args',
function( $args ) {
if ( ! isset( $args['post_type'] ) || 'post' !== $args['post_type'] ) {
return $args;
}
$category_ids = wp_get_object_terms( get_the_ID(), 'category', [ 'fields' => 'ids' ] );
$tax_query[] = [
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $category_ids,
'operator' => 'IN',
];
$args['tax_query'] = $tax_query;
return $args;
}
);