shiさん
くわしくありがとうございます。
概ね以下のコードをmy-snow-monkey.php
に追加していただければ、ご希望の表示はできると思います。(もっと良いコードの書き方はあると思いますので参考までに(^^;)
使用しているget_field()
の部分は、設定しているフィールド名に変更してください。
また不要なものは消してください。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary',
function( $html ) {
if ( 'event' === get_post_type() ):
ob_start();
?>
<?php
// カスタムフィールド:開催日 → event_day
// ACF デイトピッカー(返り値:Ymd)
$eDate = get_post_meta( get_the_ID(), 'event_day', true );
$date = date_create( $eDate );
// 曜日用
$week = array("日", "月", "火", "水", "木", "金", "土");
// 開催日の表示は 「月.日」に変更
$eventDay = date_format($date,'n.j');
$today = wp_date('Ymd');
// カスタムフィールド:開始時刻 → event_starttime
// ACF Time Picker(返り値:G:i)
$startTime = get_field( 'event_starttime' );
// カスタムフィールド:開始時刻 → event_endtime
// ACF Time Picker(返り値:G:i)
$endTime = get_field( 'event_endtime' );
// 開催日以降の判定
// 開催日よりも今日の日付が大きい場合
$preriod = strtotime($eDate) < strtotime($today);
// カスタムフィールド:概要欄 → event_txt
// ACF テキストエリア(改行:なにもしない)
$eventSummary = get_field( 'event_txt' )
?>
<div class="event_day_post">
<p class="event_date"><?php echo esc_attr( $eventDay) ; ?><span class="week"><?php echo esc_attr( $week[(int)date_format($date,'w')] ) ?></span></p>
<p class="event_time"><?php echo esc_attr( $startTime ) ; ?> - <?php echo esc_attr( $endTime ) ; ?></p>
</div>
<div class="event_txt">
<p><?php echo nl2br( esc_attr( $eventSummary ) ); ?></p>
</div>
<?php if( $preriod ): ?> // 開催日以降の条件分岐
<div class="event_finish">終了しました</div>
<?php else: ?>
<div class="event_open">これから開催です</div>
<?php endif; ?>
<?php
$event = ob_get_clean();
return str_replace(
'</header>',
'</header>'.$event , // 投稿タイトルの下に追加
$html
);
endif;
return $html;
}
);
結果 ↓

【お使いの Snow Monkey のバージョン】15.7.0
【お使いの Snow Monkey Blocks のバージョン】12.3.1
【お使いの Snow Monkey Editor のバージョン】6.0.1
【お使いのブラウザ】Firefox 92.0
【当該サイトのURL】http://gsr-jp.com/seminer-event/
### 実現したいこと
投稿日に曜日を追加したい。
### 発生している問題
### 試したこと
My Snow Monkeyに以下のコードを追加しましたが、エラーになりました。
add_filter(
'snow_monkey_template_part_render',
function( $html, $slug ) {
if ( 'template-parts/loop/entry-summary/meta/meta' === $slug ) {
return preg_replace(
'<time datetime="<?php the_time( 'c' ); ?>"><!--?php the_time( get_option( 'date_format' ) ); ?--></time>',
'<time datetime="<?php the_time( 'c(D)' ); ?>"><!--?php the_time( get_option( 'date_format' ) ); ?--></time>',
$html
);
}
return $html;
},
10,
2
);
名前と得意分野で、それぞれコードを分けて以下のような感じでどうでしょうか?
/**
* カスタム投稿タイプのアーカイブページにて、投稿一覧(リッチメディア型)のタイトルの前に、'名前:'を表示
*
* @param string $html はコンテンツの中身.
*/
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/title/title',
function ( $html ) {
if ( 'banso-mate' !== get_post_type() ) {
return $html;
}
$html = str_replace( '<h3>', '<h3>名前:', $html );
return $html;
}
);
/**
* カスタム投稿タイプのアーカイブページにて、投稿一覧(リッチメディア型)に、タグ・ディスクリプションを表示
*
* @param string $html はコンテンツの中身.
*/
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/content/content',
function ( $html ) {
if ( 'banso-mate' !== get_post_type() ) {
return $html;
}
$postid = get_the_ID();
$taxonomy = 'banso_tags';
$post_terms = get_the_terms( $postid, $taxonomy );
if ( ! empty( $post_terms ) ) {
$tags = '<div>';
$tags .= '<h3>得意分野:</h3>';
$tags .= '<div>';
$tags .= '<ul class="smb-taxonomy-terms__list">';
foreach ( $post_terms as $post_term ) {
$term_name = $post_term->name;
$tags .= '<li class="smb-taxonomy-terms__item">' . $term_name . '</li>';
}
$tags .= '</div>';
$tags .= '</div>';
}
$meta_description = get_post_meta( get_the_ID(), 'wp-seo-meta-description', true );
$html = $tags . '<div class="c-entry-summary__content">' .$meta_description. '</div>';
return $html;
}
);
ありがとうございます。
get_post_type()
に変更で、うまくいきました。
/**
* 各投稿一覧で taxonomy のラベルをタイトルの上に表示
*
* @param string $html はコンテンツの中身.
*/
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/title/title',
function ( $html ) {
$taxonomy = 'category';
$post_type = get_post_type();
switch ( $post_type ) {
case 'post':
$taxonomy = 'category';
break;
case 'news':
$taxonomy = 'news_category';
break;
case 'shop-info':
$taxonomy = 'shop_genre';
break;
case 'interview':
$taxonomy = '';
break;
}
$tags = '';
$postid = get_the_ID();
$post_terms = get_the_terms( $postid, $taxonomy );
if ( ! empty( $post_terms ) ) {
$tags = '<ul class="' .$taxonomy. '-tags taxonomy-tags">';
foreach ( $post_terms as $post_term ) {
$term_name = $post_term->name;
$slug = $post_term->slug;
$term_id = $post_term->term_id;
$tags .= '<li class="' .$taxonomy. '-' .$term_id.' ' .$slug.'">' . $term_name . '</li>';
}
$tags .= '</ul>';
}
$html = str_replace( '<h3', $tags . '<h3', $html );
return $html;
}
);
【お使いの Snow Monkey のバージョン】14.3.5
【お使いの Snow Monkey Blocks のバージョン】11.4.1
【お使いの Snow Monkey Editor のバージョン】5.0.6
【お使いのブラウザ】chrome
【当該サイトのURL】 https://demo.waiwai-do.com/news/do_action-japan-2020/
### 実現したいこと
カスタム投稿タイプの関連記事で、投稿タイプの判別をしたい。
投稿一覧のカテゴリーのラベルの表示位置を変えるために以下のコードを追加しています。
/**
* 各投稿一覧で taxonomy のラベルをタイトルの上に表示
*
* @param string $html はコンテンツの中身.
* @param string $name は post type.
*/
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/title/title',
function ( $html, $name ) {
$taxonomy = 'category';
$post_type = $name;
switch ( $name ) {
case 'post':
$taxonomy = 'category';
break;
case 'news':
$taxonomy = 'news_category';
break;
case 'shop-info':
$taxonomy = 'shop_genre';
break;
case 'interview':
$taxonomy = '';
break;
}
if ( $post_type === $name ) {
$tags = '';
$postid = get_the_ID();
$post_terms = get_the_terms( $postid, $taxonomy );
if ( ! empty( $post_terms ) ) {
$tags = '<ul class="' .$taxonomy. '-tags taxonomy-tags">';
foreach ( $post_terms as $post_term ) {
$term_name = $post_term->name;
$slug = $post_term->slug;
$term_id = $post_term->term_id;
$tags .= '<li class="' .$taxonomy. '-' .$term_id.' ' .$slug.'">' . $term_name . '</li>';
}
$tags .= '</ul>';
}
$html = str_replace( '<h3', $tags . '<h3', $html );
}
return $html;
},
10,
2
);
投稿一覧では、name が投稿タイプになっているのですが、カスタム投稿タイプのシングルページで、関連記事の部分では、投稿タイプにかかわらず、name が post になっているため、投稿タイプの判別ができません。
関連記事でもラベルの位置を変更したいのですが、何かいい方法はありますか?
投稿一覧
<!-- Start : [slug] => template-parts/loop/entry-summary/title/title [name] => news [template-slug] => template-parts/loop/entry-summary/title/title -->
関連記事
<!-- Start : [slug] => template-parts/loop/entry-summary/title/title [name] => post [template-slug] => template-parts/loop/entry-summary/title/title -->
ひとまず簡単な方法として、画像を表示しているattachment.phpをiframeをポップアップさせる方法です。

Easy Fancyboxプラグインを使用している場合になりますが、左メニュー【設定】内の【メディア】を開くと、下部にEasy Fancyboxの各種設定項目がありますので、iFrameにもチェックを入れ【変更を保存】を押してください。
次に前回ご提示したコード
<a target="_blank" rel="noreferrer noopener"
を<a class="fancybox-iframe"
に(以下のように)変更します。
my-snow-monkey.phpに記述
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary',
function( $html ) {
if ( is_search() ) {
$html = str_replace(
'<a',
'<a class="fancybox-iframe"',
$html
);
}
return $html;
}
);
これで、検索結果ページの投稿をクリックすると、新しいタブで開くのではなく、ポップアップ(Fancybox)で開くようになると思います。
一度お試しください。
【お使いの Snow Monkey のバージョン】
バージョン: 14.1.0
【お使いの Snow Monkey Blocks のバージョン】
バージョン 11.4.1
【お使いの Snow Monkey Editor のバージョン】
バージョン 5.0.6
【お使いのブラウザ】
Chrome
【当該サイトのURL】
### 実現したいこと
サイト内検索の検索フォームの画像で検索されたものをクリックした時、ポップアップ形式にしたいのですがどうすればいいでしょうか?Easy FancyBoxプラグインによるポップアップ形式と同じような動作にしたいです。
### 発生している問題
ポップアップ表示にならない
### 試したこと
my-snow-monkey/my-snow-monkey.phpに下記のように追記しました。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary',
function( $html ) {
if ( is_search() ) { // 検索結果ページのみ
$html = str_replace(
'<a',
'<a class="fancybox image"',
$html
);
}
return $html;
}
);
お世話になります。
以下のように、追記したら別タブ表示になりました。
ありがとうございます。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary',
function( $html ) {
if ( is_search() ) { // 検索結果ページのみ
// $html = str_replace(
// '<a',
// '<a class="fancybox image"',
$html = str_replace(
'<a',
'<a target="_blank" rel="noreferrer noopener"',
$html
);
}
return $html;
}
);
お試しいただけるようで良かったです。
snow_monkey_template_part_render
は、
こちらや
こちら
で解説されているように、テンプレート内容を書き換えることのできるフィルターフックです。
snow_monkey_template_part_render_
以降のtemplate-parts/loop/entry-summary
は、下に記載したとおり、テーマ内の特定のテンプレートファイル(今回はentry-summary.php
)を指しています。
テーマ「Snow Monkey」
snow-monkey
└template-parts
└loop
└entry-summary.php
このentry-summary.php
の<a href="<?php the_permalink(); ?>">
に、target="_blank" rel="noreferrer noopener"
を追加する方法になります。
また、ご質問の見出し
サイト内検索の検索フォームの画像で検索されたものをクリックした時別タブで表示
とのことでしたので、検索結果ページ(is_search()
)にのみ作用するようにします。
例えば、この検索結果ページ
以下のコードをmy-snow-monkey.phpに追記することで、お望みの動作になるとは思います。
ただ、提示しておいて言うのも無責任ですが、適切なコードでないかもしれませんので、ご理解いただいたうえでお試しください。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary',
function( $html ) {
if ( is_search() ) { // 検索結果ページのみ
$html = str_replace(
'<a',
'<a target="_blank" rel="noreferrer noopener"',
$html
);
}
return $html;
}
);
なお、ほかのページにある画像の拡大は、ソースコードを拝見したところ、Easy FancyBoxプラグインによるポップアップ形式になっているようなので、同じ動作をさせる場合には、上記コードの該当箇所を
$html = str_replace(
'<a',
'<a class="fancybox image"',
としてあげると同じ表現になるような気がします。
※こちらは未検証です。
以上となりますが、まずは一度お試しください。
あ、そうか失礼しました。追加したコードで強制的に更新日が追加されるからですね。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/meta/meta',
function( $html ) {
// 更新日と公開日が同じ、あるいは更新日より公開日が新しい場合は更新日を追加しない
if ( get_the_time( 'Ymd' ) >= get_the_modified_time( 'Ymd' ) ) {
return $html;
}
ob_start();
?>
<li class="c-meta__item c-meta__item--modified">
<i class="fas fa-sync-alt" aria-hidden="true"></i>
<?php
$date_format = get_option( 'date_format' );
the_modified_time( $date_format );
?>
</li>
<?php
$modified = ob_get_clean();
return preg_replace(
'|(<li class="c-meta__item c-meta__item--published">.*?</li>)|ms',
'$1' . $modified,
$html
);
}
);
キタジマさん、
該当部分を教えていただいたコードに変えて、My Snow Monkeyに追記して無事出来ました、ありがとうございました。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/meta/meta',
function( $html ) {
ob_start();
?>
<li class="c-meta__item c-meta__item--modified">
<i class="fas fa-sync-alt" aria-hidden="true"></i>
<?php
$date_format = get_option( 'date_format' );
the_modified_time( $date_format );
?>
</li>
<?php
$modified = ob_get_clean();
return preg_replace(
'|(<li class="c-meta__item c-meta__item--published">.*?</li>)|ms',
'$1' . $modified,
$html
);
}
);

投稿日と更新日を切り分けて表示させるルールがないので、記事更新をしていないくても強制的に更新日が表示されるので、その点理解して使用してみます。
functions.php
で、以下のリンクを外す記述をしているだけですね。
add_filter(
'snow_monkey_template_part_render',
function( $html, $slug, $name ) {
if ( 'template-parts/loop/entry-summary' === $slug && 'tournament_all' === $name ) {
$html = preg_replace( '|<a>]+?>|ms', '', $html );
$html = str_replace( '|</a>', '', $html );
return $html;
}
return $html;
},
10,
3
);
改めて確認してみました。当初の
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/meta/meta',
function( $html ) {
ob_start();
?>
<li class="c-meta__item c-meta__item--comments__number"><span>
<?php
echo get_comments_number();
?>
</span>コメント</li>
<?php
$modified = ob_get_clean();
return preg_replace(
'|(<li class="c-meta__item c-meta__item--published">.*?</li>)|ms',
'$1' . $modified,
$html
);
}
);
で正しいと思います。
ループの中のテンプレートは name
が投稿タイプ名になっているので、
– template-parts/loop/entry-summary/entry-summary-news.php
– template-parts/loop/entry-summary/content/content-news.php
みたいなファイルを追加することで、その投稿タイプ用のファイルとして使われます! もしテンプレートを追加するほどではない軽微な変更を特定の投稿タイプのときに入れたいということであれば、
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/entry-summary',
function( $html, $name ) {
if ( 'news' === $name ) {
return str_replace( ... );
}
return $html;
},
10,
2
);
みたいな感じでもカスタマイズできるかなと思います。
【お使いの Snow Monkey のバージョン】 14.0.2
【お使いの Snow Monkey Blocks のバージョン】 11.0.3
【お使いの Snow Monkey Editor のバージョン】 未使用
【お使いのブラウザ】 Chrome
【当該サイトのURL】 開発中です。
### 実現したいこと
記事一覧にコメント数を表示したい。
コメントの表示はできたのですが、余分なコードが消せません。
### 発生している問題
フォーラム内で似た事案を見つけ、それをベースに書き換えました。
なんとかコメント数の表示はできたのですが、余分なコードが消せません。
消すと重大なエラーが出てしまい、どこを触ればよいのか分からない状況です。
PHPの記法の問題で恐縮なのですが、My snow monkeyへの書き方を教えていただけないでしょうか?
### 試したこと
■コメントを表示するために記述したコードは下記です。
add_filter(
'snow_monkey_template_part_render_template-parts/loop/entry-summary/meta/meta',
function( $html ) {
ob_start();
?>
<li class="c-meta__item c-meta__item--comments__number"><span>
<?php
echo get_comments_number();
?>
</span>コメント</li>
<?php
$modified = ob_get_clean();
return preg_replace(
'|(<li class="c-meta__item c-meta__item--published">.*?</li>)|ms',
'$1' . $modified,
$html
);
}
);
■解決したいこと
12行目の
<?php
$modified = ob_get_clean();
から下は必要ないと思うのですが、消す方法が分かりません……。
■参考にしたコードは下記です。
記事一覧ページに更新日を追加したいです。
よろしくお願いいたします。