My Snow Monkey プラグインか子テーマの functions.php
に下記のコードを追加してみてください。
add_filter(
'snow_monkey_get_template_part_args_template-parts/content/entry-meta',
function( $args ) {
// タームを格納する変数
$terms = [];
// 記事に関連したタクソノミーを取得
$taxonomies = get_object_taxonomies( get_post_type(), 'object' );
// それぞれのタクソノミーをもとに、記事に設定されたタームを取得
foreach ( $taxonomies as $taxonomy ) {
if ( ! $taxonomy->public ) {
continue;
}
// 記事に設定された、そのタクソノミーのタームを取得
$_terms = get_the_terms( get_the_ID(), $taxonomy->name );
// ターム用変数に格納
$terms = array_merge(
$terms,
is_array( $_terms ) ? $_terms : []
);
}
$args['vars']['_terms'] = $terms;
return $args;
}
);
実現できないことはないと思いますが、結構コードを書かないといけないので難易度は結構高いと思います。流れとしては次のような感じでしょうか。
1. 記事編集画面に、任意の記事を4つまで選択できるカスタムフィールドを用意する
2. カスタムフィールドで記事が選択されていればそれを、されていなければデフォルトのものを表示する
3. 関連記事のクエリは snow_monkey_get_template_part_args_template-parts/content/related-posts
フックで `$args[‘vars’][‘_posts_query’] を書き換えて実現する
v15.14.2 で機能を追加してみました。下記のコードで出る位置の設定やハンバーガーボタンの有無をカスタマイズできます。
add_filter(
'snow_monkey_get_template_part_args_template-parts/nav/drawer',
function( $args ) {
$args['vars']['_inverse'] = true; // ドロワーを右から出す
$args['vars']['_display-hamburger-btn'] = true; // ドロワー内にハンバーガーボタンを表示
return $args;
}
);
【お使いの Snow Monkey のバージョン】15.8.1
【お使いの Snow Monkey Blocks のバージョン】12.4.1
【お使いの Snow Monkey Editor のバージョン】6.1.0
【お使いのブラウザ】Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36
【当該サイトのURL】
### 発生している問題
アクセシビリティのチェックをしていて気が付いたのですが、投稿一覧の「c-entry-summary__title」が、h3 タグで出力されます。
template-parts\loop\entry-summary\title\title.php
を確認すると、
$args = wp_parse_args(
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable
$args,
// phpcs:enable
[
'_entries_layout' => 'rich-media',
'_title_tag' => 'h2',
]
);
となっていますが、実際に出力されているのは h3 です。
こちらでも同様に h3 になっているので、一度ご確認ください。
とりあえずは、下記のコードで対処しています。
/**
* 投稿一覧の .c-entry-summary__title を h2 に変更
*
* @param string $args 文字列.
*/
add_filter(
'snow_monkey_get_template_part_args_template-parts/loop/entry-summary/title/title',
function ( $args ) {
$args['vars']['_title_tag'] = 'h2';
return $args;
}
);
【お使いの Snow Monkey のバージョン】 15.9.3
【お使いの Snow Monkey Blocks のバージョン】12.4.1
【お使いの Snow Monkey Editor のバージョン】6.1.0
【お使いのブラウザ】chrome
【当該サイトのURL】こちら
いつもお世話になっております。
### 実現したいこと
以前こちらで質問させていただいた「右上のカテゴリーラベルを親カテゴリー限定の表示にしたい(カスタム投稿)」が正常に表示されなくなりました。
現状 新築・リフォーム 親カテゴリー のみをカテゴリーラベルに表示にしたいが(なっていた)
何故か、ファザードなどの子カテゴリーが混ざって表示されるようになった。
### 以前のコード
// 施工例最新の親カテゴリーラベルを限定する
add_filter(
'snow_monkey_get_template_part_args',
function( $args ) {
if ( 'template-parts/loop/entry-summary/term/term' === $args['slug'] && 'dcsworks' === $args['name'] ) { // 'post' の部分は投稿タイプ名
$_terms = get_the_terms( get_the_ID(), 'kind' ); // タクソノミー名を指定
if ( $_terms ) {
$_term = $_terms[0];
if ( 0 !== $_term->parent ) {
$ancestors = get_ancestors( $_term->term_id, 'kind', 'taxonomy' ); // タクソノミー名を指定
$top_level_term_id = end( $ancestors );
if ( $top_level_term_id ) {
$_term = get_term( $top_level_term_id, 'kind' ); // タクソノミー名を指定
}
}
$args['vars']['_terms'] = [ $_term ];
}
}
return $args;
}
);
バージョンアップにより変更を加える必要があるのでしょうか?
結果こうなりました。MTGで詰める予定
本当にありがとうございます。なんとなく感覚がわかって来た
あとはこの連想配列というか、多次元配列というかこの宣言の仕方に慣れるだけですね
add_action(
'snow_monkey_get_template_part_args_templates/view/content',
function( $args ) {
// カスタム投稿タイプ information のとき(カスタマイザーでビューテンプレートを変更している場合は効きません)
if ( 'information' === $args['name'] ) {
// 投稿日を表示
$args['vars']['_display_entry_meta'] = true;
// 前後の記事を表示
$args['vars']['_display_entry_footer'] = true;
$args['vars']['_display_prev_next_nav'] = true;
// 関連記事を非表示
$args['vars']['_display_related_posts'] = false;
}
return $args;
}
);
add_action(
'snow_monkey_get_template_part_args_templates/view/content',
function( $args ) {
// カスタム投稿タイプ special のとき(カスタマイザーでビューテンプレートを変更している場合は効きません)
if ( 'special' === $args['name'] ) {
// 投稿日を表示
$args['vars']['_display_entry_meta'] = true;
// 前後の記事を表示
$args['vars']['_display_entry_footer'] = true;
$args['vars']['_display_prev_next_nav'] = true;
// 関連記事を非表示
$args['vars']['_display_related_posts'] = false;
}
return $args;
}
);
時間があいたので、投稿日(メタ)と前後のリンクだけ表示しようとしています
投稿日、更新日、投稿者は表示されました(これらの個別編集をしたいところですがそれはのちほど)
ページの前後が表示されません。 なにかたりない? のでしょうか
add_action(
'snow_monkey_get_template_part_args_templates/view/content',
function( $args ) {
// カスタム投稿タイプ information のとき(カスタマイザーでビューテンプレートを変更している場合は効きません)
if ( 'information' === $args['name'] ) {
// 投稿日を表示
$args['vars']['_display_entry_meta'] = true;
// 前後の記事を表示
$args['vars']['_display_prev_next_nav'] = true;
}
return $args;
}
);
もしや1つづつかとおもったのですが、だめでした。
これって、$args[‘vars’][‘hoge’] となってる多次元配列を
検索してみつけたら上書きするという流れで認識間違えないでしょうか
snow-monkey/templates/view/content.php
をみてみてください。中に下記のコードがあると思います。
$args = wp_parse_args(
// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable
$args,
// phpcs:enable
[
'_display_adsense' => false,
'_display_article_bottom_widget_area' => false,
'_display_article_top_widget_area' => false,
'_display_bottom_share_buttons' => false,
'_display_contents_bottom_widget_area' => false,
'_display_comments' => true,
'_display_entry_footer' => false,
'_display_entry_header' => $display_entry_header,
'_display_eyecatch' => $display_eyecatch,
'_display_profile_box' => false,
'_display_tags' => false,
'_display_top_share_buttons' => false,
]
);
「この記事を書いた人」だと $args['_display_profile_box']
で出すかどうかを管理しています。デフォルトは false
なのでカスタム投稿タイプでは表示されません(投稿の場合は snow-monkey/templates/view/content-post.php
が使用されますが、そちらでは true
になっています)。
そういう感じでこのパラメーターをよしなに書き換えることで、どのパーツを表示して表示させないかをカスタマイズできます。このパラメーターは snow_monkey_get_template_part_args_templates/view/content
フックでカスタマイズできます。
add_action(
'snow_monkey_get_template_part_args_templates/view/content',
function( $args ) {
// カスタム投稿タイプ news のとき(カスタマイザーでビューテンプレートを変更している場合は効きません)
if ( 'news' === $args['name'] ) {
// 「この記事を書いた人」を表示
$args['vars']['_display_profile_box'] = true;
}
return $args;
}
);
子テーマのように1枚のテンプレートを編集することも出来るのか等について教えて下さい
できます。普通に子テーマをつくって、snow-monkey/templates/view/content-news.php
や snow-monkey/template-parts/content/entry/entry-news.php
なんかをつくって HTML や PHP を記述すれば良いです。Snow Monkey も単なる WordPress テーマなので、他のテーマと同じく子テーマをつくってテンプレートの上書きは可能です。
多分、投稿のテーマを読み込んでいるので、それを直接いじると
投稿のテーマを読み込んでるモノ全部に影響がある可能性あり?
もちろん影響しますが、それよりもテーマ(に限らずプラグインもコアも)のファイルを直接いじってはダメです。多分これも前コメントしたと思いますが、アップデートは最新のファイルをネット上からダウンロードしてきてサーバー内のファイルと置き換える行為なので、直接いじるとアップデートしたらその変更は消えていまします。
わー!ご解説いただきありがとうございます…m(__)m
できました!!本当にありがとうございます><
カスタム投稿が計2つあったのでこんな感じで書いてみました。
add_filter(
'snow_monkey_get_template_part_args',
function( $args ) {
// 記事一覧カテゴリー以外のテンプレートの場合は無視
if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) {
return $args;
}
// 投稿以外の場合は無視 ← ビューテンプレートを「投稿のビューテンプレート」にしていると、そのカスタム投稿も影響を受けます。つまり無視されません。
if ( 'post' !== $args['name'] ) {
return $args;
}
if ( 'news' === get_post_type() ) {
$args['vars']['_terms'] = get_the_terms( get_the_ID(), 'news_category' );
}
if ( 'article' === get_post_type() ) {
$args['vars']['_terms'] = get_the_terms( get_the_ID(), 'article_category' );
}
return $args;
}
);
ありがとうございました!!
解説コメントを付け加えてみました。
add_filter(
'snow_monkey_get_template_part_args',
function( $args ) {
// 記事一覧カテゴリー以外のテンプレートの場合は無視
if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) {
return $args;
}
// 投稿以外の場合は無視 ← ビューテンプレートを「投稿のビューテンプレート」にしていると、そのカスタム投稿も影響を受けます。つまり無視されません。
if ( 'post' !== $args['name'] ) {
return $args;
}
// 全ての設定されたカテゴリーを返す ← ここで「投稿のビューテンプレート」なカスタム投稿タイプも「category」を取得しにいくためカテゴリーラベルの表示が消えます
$args['vars']['_terms'] = get_the_terms( get_the_ID(), 'category' );
return $args;
}
);
ということで、こんな感じでどうでしょうか?(適宜変更してみてください)
add_filter(
'snow_monkey_get_template_part_args',
function( $args ) {
// 記事一覧カテゴリー以外のテンプレートの場合は無視
if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) {
return $args;
}
if ( 'post' !== $args['name'] ) {
return $args;
}
// 投稿のときは全ての設定されたカテゴリーを返す
if ( 'post' === get_post_type() ) {
$args['vars']['_terms'] = get_the_terms( get_the_ID(), 'category' );
}
// news のときは news_category を返す
if ( 'news' === get_post_type() ) {
$args['vars']['_terms'] = get_the_terms( get_the_ID(), 'news_category' );
}
return $args;
}
);
@キタジマタカシ氏
上記のコード、上手く動かないような気がします。原因特定できていないですけど…
僕の方では、ホームページ設定した固定ページに最近の投稿ブロックを配置して以下のようなコードで試してみました。過去の投稿を更新してみても並び順が変わらないので…なんでだろ…
add_filter(
'snow_monkey_get_template_part_args_template-parts/widget/snow-monkey-posts',
function( $args ) {
if ( is_front_page() ) {
$args['vars']['_posts_query']->set( 'orderby', 'modified' );
return $args;
}
return $args;
}
);
PaPa-Riderさん
参考のご提示ありがとうございます。よくわかりました。
適宜調整は必要かもしれませんが、こんな感じでいかがでしょうか?
画像のキャプション欄に以下を挿入
<i class="fas fa-camera-retro"></i>画像引用元:<a href="https://example.com/" target="_blank" rel="noreferrer noopener">PaPa-Riderブログ</a>
my-snow-monkey.phpに以下を追加
add_filter(
'snow_monkey_get_template_part_args_template-parts/common/page-header',
function( $args ) {
$args['vars']['_display_image_caption'] = true;
return $args;
}
);
アイキャッチの右下に引用元を表示する場合は、CSSを一部上書き
.c-page-header__bgimage-caption {
text-align: right;
}
一度お試しくださいませ。
やるとすればフックでクエリを書き換える方法になります。下記サンプルです(動作未確認)。
add_filter(
'snow_monkey_get_template_part_args_template-parts/widget/snow-monkey-posts',
function( $args ) {
// 任意のタクソノミーの投稿ブロック/任意のタクソノミーの投稿ウィジェットの場合
// 実際にはもうちょっと条件を足して絞り込んだほうが良いかも
if ( 'taxonomy' === $args['name'] ) {
$args['vars']['_posts_query']->set( 'post__in', [ 1, 2, 4 ] );
}
return $args;
}
);
個人的には、表示したい各投稿に共通する適当なタグをつけて、それを呼びだすのが一番簡単だと思います。
僕も確認してみましたがちゃんと反映されているようでした。もし「記事一覧の表示順」というのが「トップページの記事の一覧」ということであれば、トップページでは最近の投稿ブロックを使用されているようなのでこのコードでは並び順は変更されません(is_main_query
で分岐しているけど、最近の投稿ブロックはメインクエリーではないため)
最近の投稿ブロックのクエリを書き換える場合は下記のような感じになります(すべての最近の投稿ウィジェット・最近の投稿ブロックに影響が出るので、実運用では適当に条件分岐させるのが良いと思います)。
add_filter(
'snow_monkey_get_template_part_args_template-parts/widget/snow-monkey-posts',
function( $args ) {
$args['vars']['_posts_query']->set( 'orderby', 'modified' );
return $args;
}
);