フォーラムへの返信
-
投稿者投稿
-
## 既存のテンプレートを希望のレイアウトになるようにカスタマイズする
snow-monkey/template-parts/content/entry/entry.phpの出力をカスタマイズする例です。記事の本文部分のみカスタマイズしたい場合は、snow-monkey/template-parts/content/entry/content/content.phpを対象に変更してください。add_filter( 'snow_monkey_template_part_render_template-parts/content/entry/entry', function ( $html, $name ) { // 投稿タイプが「投稿」のときのみ。 if ( 'post' === $name ) { ob_start(); ?> <article <?php post_class(); ?>> <div class="xxx"> <div class="xxx"> <?php the_post_thumbnail(); ?> </div> <div class="xxx"> <div class="xxx"> <?php the_date(); ?> | <?php the_category(); ?> </div> <div class="xxx"> <?php the_content(); ?> </div> </div> </div> </article> <?php return ob_get_clean(); } return $html; }, 10, 2 );スクショから想像すると、「左側にアイキャッチ画像、右側に投稿日とカテゴリー名、本文が表示されるようにしたいけど、そのレイアウトを毎回エディターで作成するのは大変なので、テンプレートを作りたい」といういうことかなと思うのですが、認識あっていますかね?
その場合、考えられる方法としては、
– 前述のようにオリジナルのテンプレートを追加する(この場合、投稿のたびにテンプレートの選択が必要)
– 既存のテンプレートを希望のレイアウトになるようにカスタマイズするがあるかなと思います。
———-
## 前述のようにオリジナルのテンプレートを追加する(この場合、投稿のたびにテンプレートの選択が必要)
### ファイル構成
- my-snow-monkey - override - page-templates - my-one-column.php - templates - view - my-content.php### my-snow-monkey/override/page-templates/my-one-column.php
<?php /** * Template Name: My One Column * Template Post Type: post */ use Framework\Controller\Controller; Controller::layout( 'one-column' ); // 既存のレイアウトテンプレートを使用 Controller::render( 'my-content', get_post_type() ); // オリジナルのビューテンプレートを使用### my-snow-monkey/override/templates/view/my-content.php
<article <?php post_class(); ?>> <div class="xxx"> <div class="xxx"> <?php the_post_thumbnail(); ?> </div> <div class="xxx"> <div class="xxx"> <?php the_date(); ?> | <?php the_category(); ?> </div> <div class="xxx"> <?php the_content(); ?> </div> </div> </div> </article>PHP テンプレートなので、自分で HTML と CSS を組んでレイアウトする必要があります。ざっくりですが、こんな感じになると思います。
———-
## 既存のテンプレートを希望のレイアウトになるようにカスタマイズする
これはちょっとまた後で書きます。
一度確認したほうが良いかなと思うのですが、そもそもオリジナルのテンプレートをつくりたいのはなぜでしょうか?
既存のカスタムページテンプレートで適当なものがあるのであれば、つくるのではなく、それを使うのが一番簡単です。スクショの感じであれば「ランディングページ(ヘッダー・フッターあり)」が使えそうな気がします。
(ただ、その場合、このコンテンツのレイアウト(左側にアイキャッチ、右側に日付・カテゴリー名)というのを投稿のたびに組まないといけないです…)もし既存のカスタムページテンプレートに適当なものがない(例えば、全くページ自体のレイアウトが違うページをつくりたい等)のであれば、My Snow Monkey や子テーマを使ってオリジナルのテンプレートをつくる必要があります。
♥ 0Who liked: No userマイアカウントページからダウンロードできる、My Snow Monkey というプラグインがあります。何も機能がない空のプラグインなので、My Snow Monkey に直接コードを書いて Snow Monkey をカスタマイズするという使い方をします。
この My Snow Monkey をお使いのサイトにインストールし、
wp-content/plugins/my-snow-monkey/の中に、overrideというフォルダを手動で作成する、という意味になります。♥ 0Who liked: No user「テンプレート編集」というのは、ページの編集画面 → 設定パネル → テンプレートのところから作成したテンプレート、という認識であっていますか?
その場合、作成されたテンプレートは「ブロックテンプレート」になるのですが、Snow Monkey のヘッダーやフッターはブロックテンプレートに対応した形式ではない(= PHP テンプレート)なので、ブロックテンプレートに表示させることができません。
Snow Monkey の場合、子テーマの
/page-templatesの中に PHP テンプレートを作成するか、My Snow Monkey プラグインにコードを追加して PHP テンプレートを追加することができます。前後ナビについては下記のコードで非表示にできそうでした。
ただ、SQL を直接書き換えるので、個人的にはあんまり積極的には使いたくないかなぁという印象です。function my_exclude_meta_from_adjacent_where( $where ) { global $wpdb; // メンバーのときは絞り込まない if ( ! \Snow_Monkey\Plugin\MemberPost\App\Helper::is_restricted_member() ) { return $where; } $meta_key = \Snow_Monkey\Plugin\MemberPost\App\Config::get( 'restriction-key' ); // p は WP コアの get_adjacent_post() 内で使われる posts テーブルのエイリアス $where .= $wpdb->prepare( " AND NOT EXISTS ( SELECT 1 FROM {$wpdb->postmeta} m WHERE m.post_id = p.ID AND m.meta_key = %s )", $meta_key ); return $where; } add_filter( 'get_previous_post_where', 'my_exclude_meta_from_adjacent_where' ); add_filter( 'get_next_post_where', 'my_exclude_meta_from_adjacent_where' );関連記事は WordPress ループを使っているので、先日のコードの適用条件を緩くすれば良さそうです。ただ、管理画面以外のときは全部のクエリーに適用されるので、動作が重くなる可能性があること、意図しない部分にも適用されてしまう可能性があること、に注意する必要がありそうです。
add_action( 'pre_get_posts', function( $query ) { // メンバーのときは絞り込まない if ( ! \Snow_Monkey\Plugin\MemberPost\App\Helper::is_restricted_member() ) { return; } // 管理画面のときは絞り込まない if ( is_admin() ) { return; } $meta_query = (array) $query->get( 'meta_query' ); $meta_query[] = [ 'key' => \Snow_Monkey\Plugin\MemberPost\App\Config::get( 'restriction-key' ), 'compare' => 'NOT EXISTS', ]; $query->set( 'meta_query', $meta_query ); } );なるほどです。一応、ページ自体を「Snow Monkey Member Post」でメンバー限定にしたとして、それを「非メンバー(つまりサイトにログインしていない人)+ 一覧画面」のときは表示しないようにするのは下記のコードでできそうです。
add_action( 'pre_get_posts', function( $query ) { // メンバーのときは絞り込まない if ( ! \Snow_Monkey\Plugin\MemberPost\App\Helper::is_restricted_member() ) { return; } // 管理画面のとき、あるいはメインクエリーじゃないときは絞り込まない if ( is_admin() || ! $query->is_main_query() ) { return; } // ホーム、アーカイブページ、検索結果ページ、以外のときは処理しない if ( ! is_home() && ! is_archive() && ! is_search() && ! ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { return; } $meta_query = (array) $query->get( 'meta_query' ); $meta_query[] = [ 'key' => \Snow_Monkey\Plugin\MemberPost\App\Config::get( 'restriction-key' ), 'compare' => 'NOT EXISTS', ]; $query->set( 'meta_query', $meta_query ); } );この「極秘」の記事は、どういう方法で会員限定にされていますか?
この「極秘」と同じ方法で会員限定にしている記事を全て非表示にしたいということであれば、単純にカテゴリーで絞るより良い方法があるかもなと思いまして…。あと、現状、僕のパソコンで https://tarcoon.me/jp/media/blog/ を開いても表示されていないです。
♥ 0Who liked: No userフロントページのタイトルタグに description が追加されるのは WordPress のデフォルトではないですかね?
よく覚えていないのでざっとコードを検索してみたのですが、Snow Monkey テーマではタイトルタグは特にカスタ合図していない気がします。もしかしたら、テーマで何かしている可能性がゼロではないかもですが、プラグインでタイトルタグをカスタマイズするというのは基本的に無い(プラグインはその用途に特化した処理をおこなうように設計しているため)と思うので、別のプラグインのキャッシュがちょうど切れたとか、そういう系のほうが怪しい気がします。
参考:
♥ 0Who liked: No userNews のほうは Snow Monkey のテンプレートパーツで表示(HTML のクラスは
.c-entries.c-entries--rich-media)されていますが、HOME のほうはコアのブロック(.wp-block-latest-posts__list)が使われているみたいです。HOME のほうでも Snow Monkey Blocks の「最近の投稿」ブロック(←インサーターで赤いアイコンで表示されるほう)を使うと表示が揃います。
♥ 0Who liked: No userSnow Monkey Forms はパーマリンクがデフォルト(
example.com?page_id=127みたいな URL)だと REST API 通信に失敗して表示も送信もできないんです。パーマリンクをデフォルト以外に変更したら表示されるようになると思うので、一度試してみてください!
参考:
♥ 0Who liked: No userSnow Monkey Blocks v24.1.4 としてリリースしました!アップデートして確認してみてください。
♥ 0Who liked: No userご確認ありがとうございます!
挙動としては価格メニューブロックのバグと言えると思うので、Snow Monkey Blocks 自体に修正を入れて、リリースしたいと思います。
これからアップデートしますのでしばしお待ちいただければと思います…。
♥ 0Who liked: No user下記のページに修正を反映してみました。
デベロッパーツールでテキストを書き換えて、挙動が正しいか確認いただけると助かります!
♥ 0Who liked: No user -
投稿者投稿




