この記事の後半が参考になると思います。
※Google検索ワード「HTTP_REFERER 前のページ 外部」
この記事には解説があるので、読んでおくことをオススメします!
この部分が参考になります。
<?php
//ホスト名取得
$h = $_SERVER['HTTP_HOST'];
// リファラ値があれば、かつ外部サイトでなければaタグで戻るリンクを表示
if (!empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'],$h) !== false)) {
echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">前に戻る</a>';
}
?>
- snow_monkey_prepend_main
- snow_monkey_append_entry_content
- snow_monkey_after_entry_content
詳細記事( is_singular( 'post' )
)の前後にだけ、これらのアクションフック(上記は一例)で入れ込んであげれば良いのではないでしょうか?
例えば・・・
add_action(
'snow_monkey_after_entry_content',
function() {
if ( is_singular( 'post' ) ) {
$h = $_SERVER['HTTP_HOST'];
if (!empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'],$h) !== false)) {
echo '<a href="' . $_SERVER['HTTP_REFERER'] . '">前に戻る</a>';
}
}
}
);
お試しくださいませ。
お世話になります。
ご返信いただき、ありがとうございます。
下記の記述で、思うように表示することができました。
add_action(
'snow_monkey_append_entry_content',
function() {
if ( is_singular('投稿タイプ名') ) {
?>
内容
<?php
}
}
);
ご教示くださり、ありがとうございました。
snow_monkey_append_entry_content
は全部の記事ページで実行されるので、is_singular()
などの条件分岐タグを使ってそのカスタム投稿タイプに限定して実行する必要があると思います。
こんにちは。
カスタムフィールドをどこに表示させるかで、方法は変わってくると思います。
記事の本文中に差し込みたい場合は、Oleinさんのおっしゃられているようにショートコードを使う方法が良いと思いますが、もし記事本文の下とかに表示するのならば、アクションフックを使用するのが簡単だと思います。
記事本文の下に表示する場合は、snow_monkey_append_entry_content
で表示できます。
add_action(
'snow_monkey_append_entry_content',
function() {
the_field( 'result' );
}
);
参考リンク snow_monkey_append_entry_content
下記のように実装して、うまく表示されました。ありがとうございました。
- 再利用ブロックの中に、任意のタクソノミーの投稿ブロックを設定して設置
- 連載用のタクソノミーに再利用ブロックのpost_idを指定できるようにして
- タクソノミーから再利用ブロックのpost_idを取り出し、 snow_monkey_append_entry_content に出力する
ちょっとページ区切りの仕様に詳しくないので外しているかもですが、render_block
フックでページ区切りの HTML を書き換えることができるかもしれません。
あとは snow_monkey_append_entry_content
などのアクションフックを使って、ページ区切りを設置しているページのページスラッグで条件分岐させてバナーを追加する、とかですかねー。
澤登忍さん
重複して表示される原因は Kmical Lights さんが書かれているとおりです。
Snow Monkey はテンプレートを小分けにしているので、single.php
のような大枠から上書きしなくても、コンテンツの表示部分だけを上書きすることができます。方法としては下記の2つが良いと思います。
1. コンテンツ部分のテンプレートを上書きする
My Snow Monkey の中に single.php
ではなく、コンテンツ部分を表示するためのテンプレート template-parts/content/entry/content/content-post.php
だけをつくって下記のコードを記述する。
<?php
use Framework\Helper;
?>
<?php do_action( 'snow_monkey_before_entry_content' ); ?>
<div class="c-entry__content p-entry-content">
<?php do_action( 'snow_monkey_prepend_entry_content' ); ?>
<?php
the_content():
// ここにカスタムフィールを表示するためのコードを記述
?>
<?php Helper::get_template_part( 'template-parts/content/link-pages' ); ?>
<?php do_action( 'snow_monkey_append_entry_content' ); ?>
</div>
<?php do_action( 'snow_monkey_after_entry_content' ); ?>
メリットはコンテンツ部分のマークアップを自由自在に定義できることです。デメリットとしては Snow Monkey がアップデートしてフックの名前が変わったり HTML の構造が変わったときに、このテンプレートにも反映しないと崩れが発生してしまう可能性があります。
2. アクションフックを使う
コンテンツ部分の内側で、かつ本文の前の部分で実行されるアクションフックを使う方法です。
add_action(
'snow_monkey_prepend_entry_content',
function() {
// 投稿タイプが post で詳細ページを表示しているときだけ実行
if ( is_single() && 'post' === get_post_type() ) {
// ここにカスタムフィールを表示するためのコードを記述
}
}
);
本文の後ろだと下記になります。
add_action(
'snow_monkey_append_entry_content',
function() {
// 投稿タイプが post で詳細ページを表示しているときだけ実行
if ( is_single() && 'post' === get_post_type() ) {
// ここにカスタムフィールを表示するためのコードを記述
}
}
);
ページヘッダーは表示できました!ありがとうございました!
ただ、なぜかcontent-carstock.phpが読み込まれなくなってしまいました。
今は通常の投稿と同じようなタイトルと、本文が表示された状態となっています。(今回作ろうとしているページにはこのタイトルと本文は不要です。)
content-carstock.phpには下記のコードを入力を書いています。
<?php
/**
* @package snow-monkey
* @author inc2734
* @license GPL-2.0+
* @version 10.8.0
*/
use Framework\Helper;
?>
<?php do_action( 'snow_monkey_before_entry_content' ); ?>
<div class="c-entry__content p-entry-content">
<?php do_action( 'snow_monkey_prepend_entry_content' ); ?>
<h1><?php the_field( 'maker01' ); ?> <?php the_field( 'carname01' ); ?></h1>
<?php Helper::get_template_part( 'template-parts/content/link-pages' ); ?>
<?php do_action( 'snow_monkey_append_entry_content' ); ?>
</div>
<?php do_action( 'snow_monkey_after_entry_content' ); ?>
single-carstock.phpは下記のコードです。
<?php
/**
* @package snow-monkey
* @author inc2734
* @license GPL-2.0+
* @version 9.0.0
*/
use Framework\Controller\Controller;
Controller::layout( 'one-column' ); // ← 適用したいレイアウトを記述
Controller::render( 'content', 'carstock' );
こちら、どこを触ればcontent-carstock.phpが表示されるようになりますでしょうか?
ディレクトリの位置関係は下記の通りです。
wp-content/plugins/my-snow-monkey/
∟ my-snow-monkey.php
∟ override
∟ single-carstock.php
∟ templates
∟ view
∟ content-carstock.php
∟style.css
なかなかうまくいかず申し訳ありません。
どうぞよろしくお願いいたします。
えっと、テンプレートをカスタマイズしたいというときは、下記の2点について考慮して方法を決定するのが良いと考えています。
1. 置換や単純な結合で対応可能か
2. アクションフックで対応可能か
「★記事一覧(アーカイブ)ページでの表示」の場合だと、ループの内側で、かつ <li class="c-entries__item"></div>
を外す必要があるとなると置換では対応できないと思うのでテンプレートを複製してきて上書きする必要があると思います。
「 my-snow-monkey フォルダ内での置き場所についても教えていただけると」とのことですが、My Snow Monkey はそのままの状態だと上書きする機能が有効化されていません。下記のページを参考にコードを追加することで My Snow Monkey 内にテンプレートを置いて上書きができるようになります。
ただ、My Snow Monkey の存在意義は「テンプレートの上書きを抑制させる」ということなので、もし上書きを多用する必要があるのであれば、子テーマを使うのが良いと思います。
「★記事ページでの表示」の場合は the_content()
の前か後ろということなので snow_monkey_prepend_entry_content
や snow_monkey_append_entry_content
のアクションフックを使うのが良いと思います。
add_action(
'snow_monkey_prepend_entry_content',
function() {
?>
ここに追加したい HTML
<?php
}
);