フォーラムへの返信
-
投稿者投稿
-
おはようございます。コメントさせていただきます。
設定内容として「header.php」何あるheadタグ(閉じタグ)前にjsへのパスを記述する必要があり、
snow monkeyのheader.phpを開いてみたのですが、
ファイル内にhtmlのheadタグがなくどのように設定したものか不明だったため、
ご質問させていただきました。サイトのヘッダー部分にスクリプトなどを読み込む場合には
wp_enqueue_scripts
に対してフックをかけます。そして、wp_enqueue_script()
という関数を使って読み込む必要があります。こちらを利用する場合には、My Snow Monkey もしくは子テーマからのカスタマイズという方法を取る必要がありますのでご準備をお願いします。
読み込み方は WordPress 公式ドキュメントに記述があるので参考にされるとスムーズかと思います。
さまざまな意見が出てくるかもしれませんが、持論を書かせていただこうかと思います。キタジマさんじゃなくてごめんなさい。
SnowMonkeyを子テーマなどを使ってオリジナルテーマ(テーマ名なども変更)として使うことは可能でしょうか?
(管理画面でSnowMonkeyをSnowMonkeyだと悟られずに使うことはできますでしょうか?)まず、「子テーマ」ですが、この仕組みを使うためには「親テーマ」が必要となります。ですので、Snow Monkey を子テーマ機能を使ってカスタマイズして納品する場合、必ず親テーマとして Snow Monkey がインストールされている必要があります。なぜなら、子テーマを作られたことがあるとわかるかと思うのですが、子テーマの
style.css
で親テーマがどれかを指定していますよね。ですので、WordPress テーマにおいて、親がインストールされていないのに子が存在するということは仕組み上あり得ません。ですので、子テーマという仕組みを使って「親テーマがないかのように見せる」ことは、デフォルトでは難しいでしょう。
思い浮かぶ解決方法が2つあります。
1つは、Snow Monkey は Github にも公開されているようにOSSで開発されています。誰でも内部を見ることができますし、技術さえあれば各自の環境でビルドすることもできます。
ですので、こちらからフォークをして独自のテーマとして開発を進め、メンテナンスやサポートも全てご自身で行うプロダクトを作り、お客さんへ提供するという方法があります。
2つ目は、Snow Monkey と同等、もしくはこれよりも優れているテーマをご自身で開発することです。そうすることで、Snow Monkey を使っていることをカモフラージュすることなく、胸を張ってお客さんに納品することができるでしょう。
一番簡単な方法は、子テーマやプラグインというアプローチからカスタマイズして「Snow Monkey を活用する」方法だと思いますが、ぜひ後述している2点にもチャレンジされると、さまざまな学びや知見を得ることができるのかなと思います。
頑張ってみましょう!
どのくらいPHPなどへの知識をお持ちかどうかわからないので、実現可能かどうかの判断がしにくいのですが、個人的には任意の場所に出力することを考えると、ショートコードで出力する方法が良いと思います。
手順としては、
- My Snow Monkey などカスタマイズ環境を用意する
- PHPファイルにショートコードの設定を記述する
- 任意の場所にショートコードを設置する
となると思います。
ショートコードの作り方などは公式ドキュメントを参照いただくのが間違い無いかと思います。
補足ですが、トピック内にあるように親テーマ、今回でいう Snow Monkey のテーマファイル(
singular.php
など)を直接編集されることは、テーマを問わず推奨されていません。アップデートで上書きされて元に戻ります。ですので、PHPを利用するカスタマイズを行われる際には、カスタマイズ環境を用意された上で行われることをお勧めします。
当該URLがおそらくLocalで提供されていると思うのですが、パブリックになっていないため確認することができませんでした。
♥ 0Who liked: No userHTML構造のどの部分にどう入れたいのかがわからないので、これが正しいのか判断できませんが、ページヘッダー部分(ページタイトルなどを出力している部分)をDOM構造ごと非表示にするには、このようなコードで実現できると思います。条件分岐は必要に応じて書き換えてください。
add_filter( 'snow_monkey_template_part_render_template-parts/content/entry/header/header', function ( $html ) { if ( is_page() ) { return; } return $html; } );
単純に固定ページで出力させていないだけです。
そして、任意の場所に独自のタイトルを出力する場合ですが、例えば
the_content
の最上位に挿入したい場合(これだと上記を消す意味がないのであれですが)、add_filter( 'the_content', function ( $content ) { if ( is_page() ) { $page_title = '<h1 class="original-page-title">' . get_the_title() . '</h1>'; $content = $page_title . $content; return $content; } return $content; } );
こんな感じでできると思います。一応動作は検証してあります。
デザインの都合上、ページタイトル部分の出力位置を変えたいということだと思うのですが、DOM構造的にどの部分を削除して、どのようなDOMを具体的に入れたいのかを明確に書かれた方がストレートな返答をしやすいので、問題解決には近道になると思います。
あと、開発段階とは言え現状が見られる共有URLを用意されると、よりスピーディーかと思います。
ご確認ください。
♥ 0Who liked: No user最終的なHTML構造にも寄るので正解かどうかわかりませんが、上記1のところは
str_replace
でheader
タグ全体を指定して空にすることでできると思います。また、2に関しては単純に任意の固定ページ向けに分岐を書いてから、
the_content
にフックでthe_title
をお好きなマークアップで頭に挿入したら実現できると思います。(未検証)どなたかより良い方法があれば教えて下さい!
♥ 0Who liked: No userもっとスマートな方法があるかもしれませんが、最終的にどんなDOM構造にされたいのかなど詳細はわかりかねるので、以下の流れで実現できそうだなと感じます。(未検証)
snow_monkey_template_part_render_template-parts/content/entry/header/header
へのフィルターフックで<header class="c-entry__header">〜</header>
を出力させないようにする- (構造がわからないので的確かどうかわかりませんが)
the_content
の冒頭にタイトルを出力させるようフックで処理
これで、
ページトップのh1タイトルをなくして(cssにて非表示ですとh1が2箇所になったままになるので)
ブロックでデザインしている箇所にh1タイトルを表示させたいという要件はクリアできそうな気がします。ご確認ください。
添付画像にタイトルが2箇所に用意されていることは分かるのですが、最終的にどのようにされたいのでしょうか?
それが具体的に共有いただけないと、CSSでなんとかなるのか、フックでなんとかなるのか、なんともならないのかなど、判断が難しいですねぇ。
♥ 0Who liked: No userご自身でこのように書かれていますので、
@media (min-width: 64em) { .c-site-branding .custom-logo, .wpaw-site-branding__logo .custom-logo { height: 134px; width: 305px; } }
こちらを
@media (min-width: 64em) { .c-site-branding .custom-logo, .wpaw-site-branding__logo .custom-logo { height: auto; width: auto; } }
こんな感じにしてあげたらよいのではないでしょうか?開発者ツールで確認してみてください!
♥ 0Who liked: No userご確認ありがとうございます。
このコメントを作成時、WordPress 5.8 に対して、テーマ Snow Monkey と Snow Monkey Blocks は対応しておりません。
ですので、ユーザーとしてはテストやデバッグの用途でない限り、推奨環境以外で利用しない、という方法が最適かと思います。要するに現状としては「WordPres 5.8 では テーマ Snow Monkey と Snow Monkey Blocks を使わない」という選択ということです。
実害はないですが、気持ちわるいです
それは、上記を含めてご自身で選択されて環境を用意された結果ですので、受け入れていただくか回避される処置をされることがベターなのかと、個人的には思います。
ご確認よろしくお願いいたします。
上記記事の掲載コードをそのまま使われて現在表示されているという前提でご紹介すると、以下のようにすることでトップページ(ホームページ設定でホームページに固定ページを設定した上でのトップページと解釈)にだけ表示させることができます。
add_action( 'snow_monkey_before_contents_inner', function() { if ( is_front_page() ) { $new_query = new \WP_Query( [ 'pagename' => 'front-page-slider', 'post_type' => 'page', 'post_status' => [ 'publish', 'draft' ], 'posts_per_page' => 1, ] ); if ( ! $new_query->have_posts() ) { return; } $new_query->the_post(); ?> <div class="p-entry-content" id="front-page-top-content"> <?php the_content(); ?> </div> <?php wp_reset_postdata(); } } );
-
投稿者投稿