■bogoを利用した日本語とその他の処理を分ける方法
add_action(
'snow_monkey_prepend_contents',
function() {
$current_language = get_locale();
if ( 'ja' == $current_language || 'ja_JP' == $current_language ) {
// 日本語の時の処理
?>
日本語で表示したい HTML 文字列
<?php
} else {
// それ以外の言語の時の処理
?>
他の言語で表示したい HTML 文字列
<?php
}
}
);
具体的に画像を入れたい箇所は、コンテンツの1番上になります。(ヘッダーのすぐ下です。)
snow_monkey_prepend_contents
が全ページのヘッダーのすぐ下のフックポイントになります。下記のコードでとりあえず画像が表示できます。全ページで実行されるので、表示が不要なページは条件分岐で弾いてください。
add_filter(
'snow_monkey_prepend_contents',
function() {
// トップページの場合は表示しない
if ( is_front_page() ) {
return;
}
?>
<img src="https://placehold.jp/1024x768.jpg" alt="" style="width: 100%">
<?php
}
);
また可能であればブレイクポイントで差し込む画像を切り替えたいです。
srcset
を使うのが一般的かなと思います。
お返事が遅くなりすみません。諸々調べておりました。
この現象が起きているのは、現在利用しているサーバー(大塚商会アルファメール)のみです。
@wordpress/env が使用できるような環境でもないので、調べた限りの共有になりますが
結論としては、このサーバーのみの問題かもしれないと考えています。
—-
まず snow-monkey/assets/css/app/foundation/_body/_app.php
でvar_dumpをしてみたのですが何も出力されませんでした。
試しに snow_monkey_prepend_contents
フックで設定を呼び出したところ出力されたので、そもそも、このPHPファイルを通過していないのではないかと思っています。
カスタマイザーで設定した色は、以下のような感じでCSS varsとしてheadに書き出される、ということを他のSnow Monkey設置サイトで確認しましたが…
<style id=’snow-monkey-app-inline-css’ type=’text/css’>
:root {
–accent-color: #ff0000;
–sub-accent-color: #0000ff;
}
このサイトでは何も出力されていません。
なお、
snow-monkey-inline-css
などは出力されていました。
--wp--preset--color--accent-color
にはカラーが反映されており、コアの編集画面には影響がありません。
- 「ページ速度最適化」設定はすべてオフにしています。
- セキュリティプラグイン、高速化プラグインは使用していません。
—-
こちらで確認できたのは以上です。
今回は、反映されなかったCSS varsを手書きで追加する方向で対応しますが、なにかの参考になれば幸いです。
キタジマさん
add_action は任意のフックポイント(ここでは snow_monkey_prepend_body や snow_monkey_prepend_contents)で処理を実行したり、HTML を追加するものになるので削除はできません。
基本的には、既存の Snow Monkey の HTML を削除したり書き換えたりする場合は snow_monkey_template_part_render フィルターフックを使ったり、My Snow Monkey や子テーマを使ってテンプレートを上書き(同名のファイルを My Snow Monkey や子テーマに配置したら Snow Monkey のテンプレートではなくそのテンプレートが使用されるという仕組み)で対応することになります。
理解できた・・・と思います。勉強になりました!(フィルターフックはまだわかっていないので、これから勉強します)
ありがとうございましたm(_ _)m
と考えているのですが・・・
add_action
は任意のフックポイント(ここでは snow_monkey_prepend_body
や snow_monkey_prepend_contents
)で処理を実行したり、HTML を追加するものになるので削除はできません。
基本的には、既存の Snow Monkey の HTML を削除したり書き換えたりする場合は snow_monkey_template_part_render
フィルターフックを使ったり、My Snow Monkey や子テーマを使ってテンプレートを上書き(同名のファイルを My Snow Monkey や子テーマに配置したら Snow Monkey のテンプレートではなくそのテンプレートが使用されるという仕組み)で対応することになります。
snow_monkey_prepend_contents
はランディングページ系のテンプレートには無いので、もしランディングページ系のテンプレートを使っている場合はそれが原因かもしれません。
有料にはなりますが、アーカイブページに固定ページを割り当てるためのアドオンも販売しているので必要であればぜひ。
ランディングページ系のページテンプレートの場合、ヘッダーコンテンツの表示と snow_monkey_prepend_contents
の実行はされません。なので可能性としてはランディングページ系のページテンプレートを使用されているのではないかと思うのですがどうですかね?
【お使いの Snow Monkey のバージョン】 15.11.1
【お使いの Snow Monkey Blocks のバージョン】 12.6.1
【お使いの Snow Monkey Editor のバージョン】 6.2.1
【お使いのブラウザ】 Google Chroom
【当該サイトのURL】
### 実現したいこと
topページにparticles.jsを実装したい。
### 発生している問題
### 試したこと
お世話になっております。
この動きを実装したくて
add_action(
'wp_enqueue_scripts',
function(){
// AOSの読み込み //
wp_enqueue_style(
'aos-style' ,
'https://unpkg.com/aos@2.3.1/dist/aos.css',
);
wp_enqueue_script(
'aos',
'https://unpkg.com/aos@2.3.1/dist/aos.js',
);
wp_enqueue_script(
'my-aos',
MY_SNOW_MONKEY_URL . '/scripts/aos-app.js',
['aos'],
filemtime( MY_SNOW_MONKEY_PATH . '/scripts/aos-app.js' ),
true
);
if( is_front_page() ) {
wp_enqueue_script(
'particles',
'https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js',
);
wp_enqueue_script(
'my-particle',
MY_SNOW_MONKEY_URL . '/scripts/my-particle.js',
['particles'],
filemtime( MY_SNOW_MONKEY_PATH . '/scripts/my-particle.js' ),
true
);
}
}
);
/* メインコンテンツの上部にHTMLの挿入 */
add_action(
'snow_monkey_prepend_contents',
function () {
/* if文でフロントページのみに適応 */
if (is_front_page()) {
?>
<div id="particles-js"></div>
<div class="mv__wrapper">
<h2 class="mv__wrapper__title" data-aos="fade-in" data-aos-duration="2000">D-Works</h2>
<p class="mv__wrapper__title__sentence" data-aos="fade-in" data-aos-duration="2200">テスト</p>
</div>
<?php
}
}
);
上記のコードを書きました。
AOSは実装されていたのですが、particles.jsは実装されていませんでした。
少し前にもrellax.jsを似たような方法で実装できたのですが、今回はうまくいきませんでした。
わかる方いらっしゃいましたらご教授お願い致します。
こんにちは! masalllさん
カスタマイズや表示するテンプレートの切替だけだと、ご要望の形にはならないですね。
テストしてみましたが、ウィジェットやテンプレートではできなかったです(;;)
ちなみにコードを記述することができるようであれば、My Snow Monkeyでコードを書いていけば実現は可能です!
参考:
上記のサンプルのHTMLタグで作られている部分を自分の出したいもののHTMLにしていけば実現できます(+CSS当てていく)
※特定のページだけしたいな〜という場合は、if文などでコントロールください
あ、カスタマイザーでカスタム投稿のビューテンプレートを「投稿」にされていますかね? もしかしたらそれだと僕の書いたコードだと効かないかもです。マドカさんのコードでも全然問題ないと思います! 一応僕ならこうしたほうが見やすいかな?というのも書いておきますね。
add_action(
'snow_monkey_prepend_contents',
function() {
if ( ! is_archive( 'works' ) ) {
return;
}
add_action(
'snow_monkey_get_template_part_template-parts/loop/entry-summary/meta/meta',
function() {
$terms = get_the_terms( $post->ID, 'works_tag' );
if ( ! $terms ) {
return;
}
?>
<?php foreach ( $terms as $term ) : ?>
<span class="tag-cloud-link tag-link-<?php echo esc_html( $term->term_id ); ?>"><?php echo esc_html( $term->name ); ?></span>
<?php endforeach; ?>
}
);
}
);
キタジマさん
年末&アップデート時期のご多忙な折にお返事いただきまして、本当にありがとうございます!
上記で共有いただいたコード内の「content-news」と「news_category」を、該当のカスタム投稿(works)・カスタムタクソノミー(works_tag)に書き換えて試してみたのですが、カスタム投稿のアーカイブ一覧で何も表示に変化がおきず、コード上にも特に変化なしでした。原因がよくわからず、こちらの設定に問題があるのかもしれませんが・・
試行錯誤して以下のコードを試してみまして、アーカイブ一覧にカスタムタクソノミーを表示することはできた(添付画像参照)のですが、この方法でも問題ないものでしょうか・・?
マズイ表記やもっとスマートな書き方があるかと思いますので、お時間あるときにでもみていただければ大変幸いです・・!
add_action(
'snow_monkey_prepend_contents',
function() {
if ( is_archive( 'works' ) ) {
add_action(
'snow_monkey_get_template_part_template-parts/loop/entry-summary/meta/meta',
function() {
?>
<?php
if ($terms = get_the_terms($post->ID, 'works_tag')) {
foreach ( $terms as $term ) {
$term_slug = $term -> slug;
$term_id = $term -> term_id;
echo ('<span class="tag-cloud-link tag-link-') ;
echo esc_html($term_id) ;
echo ('">') ;
echo esc_html($term->name) ;
echo ('</span>') ;
}
}
?>
<?php
}
);
}
}
);
@アクツさん
カスタムタクソノミーの場合は、タグ形式でもカテゴリー形式でも、コンテンツのメタ情報の部分に載ってしまうのが正しい挙動かと思います。
あ、記事タイトル下のところに、タグ形式のタクソノミーがでちゃうこともあるってことですよね(複数タクソノミーが割り当てられている場合はどちらかのタクソノミーが表示)。挙動的にはバグっちゃバグですね…^^; 投稿の場合はカテゴリーだけなので、カスタム投稿のときもカテゴリー形式のタクソノミーだけが表示されるのが正しい気がします。これはちょっと修正入れます。
一番良さそうな形か微妙ですが、
Snow Monkey がわざわざ Helper::get_the_public_taxonomy( get_the_ID() );
で投稿に紐付いた全タクソノミー情報をとっているのは、Snow Monkey からはどのタクソノミーを表示すれば良いのか判断ができないからなので、カスタマイズで自分の好きなタクソノミーだけを表示したいときは get_the_terms()
で好きなタクソノミーを取得すれば良いです。書き直すとこんな感じでしょうか。
カスタム投稿 news、カスタムタクソノミー news_category の場合
add_action(
'snow_monkey_prepend_contents',
function() {
// カスタム投稿のときにメタ情報のカテゴリー表示を無効化
if ( is_singular( 'news' ) ) {
remove_action( 'snow_monkey_entry_meta_items', 'snow_monkey_entry_meta_items_categories', 40 );
}
// カスタム投稿のときにメタ情報を表示
// カスタマイザーでビューテンプレートを「投稿」にしている場合は不要
if ( is_singular( 'news' ) ) {
add_filter(
'snow_monkey_get_template_part_args_template-parts/content/entry/entry',
function( $args ) {
$args['vars']['_display_entry_header'] = true;
$args['vars']['_post_type'] = 'post';
return $args;
}
);
}
// カスタム投稿のときに任意のタクソノミーをメタ情報に表示
if ( is_singular( 'news' ) ) {
add_action(
'snow_monkey_entry_meta_items',
function() {
$terms = get_the_terms( get_the_ID(), 'news_category' );
if ( ! is_array( $terms ) ) {
return;
}
?>
<?php foreach ( $terms as $term ) : ?>
<li class="c-meta__item c-meta__item--categories">
<span class="screen-reader-text"><?php echo esc_html( $terms->label ); ?></span>
<i class="fas fa-folder" aria-hidden="true"></i>
<a href="<?php echo esc_url( get_term_link( $term ) ); ?>"><?php echo esc_html( $term->name ); ?></a>
</li>
<?php endforeach; ?>
<?php
},
40
);
}
}
);
こんなにスラスラコードが書けるってすごいです。Wordpress初心者ですが、いつかキタジマさんのようになれるといいなぁ。
僕はプログラマーとしてのスキルはそんなに高くなくて、基礎的なことを地道にレゴみたいに組みあわせていっているだけなので、1行1行の意味を理解しながら書くクセをつければ、僕程度になら絶対なれると思いますよ!
上記ご説明のウィジェットエリア以外のエリアにウィジェットを配置するのは難易度が高いのですよね・・・他の方法としてはElementorなどで左右非対称のカラム分けをつくるかですよね。
アドバイスがあればご教示いただきたいです。
Elementor は詳しくないのでちょっとわからないのですが、ぱっと思いついたのは、Meta Slider のようなスライダーをショートコードでつくれるプラグインを使い、つくったショートコードをアクションフックにつっこむパターンですかね。お知らせバーやヘッダーコンテンツを使っていると変になってしまうかもなのですが、下記のようなコードでスライダーのショートコードを入れればそれっぽくなるかもしれません。
<?php
add_action(
'snow_monkey_prepend_contents',
function() {
if ( ! is_front_page() ) {
return;
}
echo do_shortcode( 'ここにスライダーのショートコード' );
}
);
こういう場合はフックでページヘッダーを表示させるなど、どうしてもコードを書く必要があります。
もし、そのコードかアドバイスを頂けるのであれば、教えていただいてもよろしいでしょうか?
投稿タイプがbbpressの時にもページヘッダーを表示させる〜となると思うのですが、
snow_monkey_prepend_contentsやsnow_monkey_prepend_mainと言ったフックもあるので、
それを使ってコンテンツの前に表示させるのも、自由に出来て良いのかなとか迷っています(笑)
お知らせバーですが、ページの一番上に表示しても、サーチコンソールが警告を出すそうです。
多分h1の前とかに、お知らせコンテンツが見える為にHTML文章の構造がGoogle側として正しくないとか判断されちゃうんでしょうか?
オーバーレイの時は、お知らせバーを使わない、またはコンテンツ下部に表示させるようになる&スクロールすると消えるとかが、ベターなのかもですね…。