メインコンテンツへ移動

まーちゅう

フォーラムへの返信

15件の投稿を表示中 - 1 - 15件目 (全266件中)
  • 投稿者
    投稿
  • まーちゅう
    参加者
    401

    固定ページなので、post=46じゃなくてpage_id=46だと思うんですが、/wp-json/wp/v2/pagesで見ると商品紹介ページはpage_id=38です。
    https://nokanoka.jp/?page_id=38

    page_id=46は、商品一覧のページのようです。
    https://nokanoka.jp/?page_id=46

    1
    Who liked:
    まーちゅう
    参加者
    401

    すみません。上のウィジェットは、サイドバーがあると全幅にならないですね。

    「個別投稿(記事)ページ上部」にウィジェットを表示したい のコードを以下のように修正してください。

    ### ウィジェットエリアを定義

    add_action(
    	'widgets_init',
    	function () {
    		register_sidebar(
    			array(
    				'name'          => '個別投稿の上部のサイドバー',
    				'id'            => 'my-single-top-sidebar', // ウィジェットエリアの名前
    				'before_widget' => '<div id="%1$s" class="c-widget %2$s">',
    				'after_widget'  => '</div>',
    				'before_title'  => '<h2 class="c-widget__title">',
    				'after_title'   => '</h2>',
    			)
    		);
    
    		register_sidebar(
    			array(
    				'name'          => 'アーカイブページ上部のサイドバー',
    				'id'            => 'my-archive-top-sidebar', // ウィジェットエリアの名前
    				'description'   => 'カテゴリー、タグ、日付アーカイブページの上部に表示されるウィジェットエリア',
    				'before_widget' => '<div id="%1$s" class="c-widget %2$s">',
    				'after_widget'  => '</div>',
    				'before_title'  => '<h2 class="c-widget__title">',
    				'after_title'   => '</h2>',
    			)
    		);
    	}
    );

    ### ウィジェットエリアを表示

    add_action(
    	'snow_monkey_before_contents_inner',
    	function () {
    		// 個別投稿の場合
    		if ( is_single() ) {
    			// my-single-top-sidebar ウィジェットエリアを表示
    			dynamic_sidebar( 'my-single-top-sidebar' );
    		}
    
    		// アーカイブページまたは投稿一覧ページの場合
    		if ( is_archive() || is_home() ) {
    			// my-archive-top-sidebar ウィジェットエリアを表示
    			dynamic_sidebar( 'my-archive-top-sidebar' );
    		}
    	}
    );
    4
    Who liked:
    まーちゅう
    参加者
    401

    投稿一覧ページは「投稿ページ上部」、それ以外のアーカイブページは「アーカイブページ上部」のウィジェットがあるので、使用してみてください。

    0
    Who liked: No user
    まーちゅう
    参加者
    401

    右側にあるブロックの設定の所にスタイルのタブがあるので「装飾無しのタイトル」を選択してください。

    1
    Who liked:
    まーちゅう
    参加者
    401
    まーちゅう
    参加者
    401

    コンテンツの最大幅550pxだと、参考サイトのように文字サイズの調整をしないと窮屈になるので、自分だったらコンテンツの最大幅はリセットして、「コンテンツの幅をスリム幅にする」の方を使うと思います。

    0
    Who liked: No user
    まーちゅう
    参加者
    401

    セクションの「コンテンツの最大幅」を設定すると、調整しやすくなると思います。
    参考サイトの場合は、550pxに設定されています。

    2カラムのレイアウトは、項目ブロック – 項目(自由入力)を使用するのが簡単です。
    行あたりのカラム数は、PC・タブレット・スマホで変更できます。

    画像は、アップロード前にサイズを揃えておけば、レイアウトが崩れることは無いと思います。

    2
    Who liked:
    まーちゅう
    参加者
    401

    drop-nav.js の window.addEventListener("resize:width", (() => n()), !1); が原因のようです。
    n()aria-hidden"true" にして hideDropNav イベント飛ばしてるので幅が変わるたびに非表示になる。

    0
    Who liked: No user
    まーちゅう
    参加者
    401

    ドロップナビが表示されている状態で、windowのリサイズをすると <div class="l-header__drop-nav" aria-hidden="true"> になるので、ドロップナビは表示されなくなります。
    そのまま下にスクロールしてもドロップナビは表示されませんが、一旦ページ最上部まで戻ってからスクロールするとドロップナビが表示されるようです。

    0
    Who liked: No user
    まーちゅう
    参加者
    401

    「カスタマイズ」 > 「デザイン」 > 「ヘッダー」で、一番下にある「ドロップナビゲーションにサイトロゴを表示する」にチェックを入れてみてください。

    1
    Who liked:
    まーちゅう
    参加者
    401

    テーマのアップデートをして確認してみました。

    前提条件として関連投稿に表示されるのは「同一のタクソノミーの記事」なので
    $args['vars']['_posts_query']->set( 'tax_query', false );
    の条件を追加しないと「同一のタクソノミーの記事が無い場合」は何も表示されない。

    上記を踏まえて、以下のコードで思った通りの表示になりました。

    <?php
    /**
     * 関連記事のクエリをカスタマイズ
     *
     * @package my-snow-monkey+
     */
    
    /**
     * 関連記事の取得クエリを操作する
     *
     * @param array $args テンプレート取得クエリ.
     * @return array テンプレート取得クエリ.
     */
    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/content/related-posts',
    	function ( $args ) {
    		$_post_type = get_post_type();
    		if ( 'post' === $_post_type || 'works-and-voices' === $_post_type ) {
    			$args['vars']['_entries_layout'] = 'simple';
    		}
    		if ( 'interview' === $args['name'] ) {
    			$args['vars']['_entries_layout'] = 'carousel';
    			$args['vars']['_title']          = '他の社員を見る';
    			$args['vars']['_posts_query']->set( 'tax_query', false );
    			$args['vars']['_posts_query']->set( 'posts_per_page', 10 );
    			$args['vars']['_posts_query']->query( $args['vars']['_posts_query']->query_vars );
    		}
    		if ( 'job-posts' === $args['name'] ) {
    			$args['vars']['_entries_layout'] = 'rich-media';
    			$args['vars']['_title']          = '他の募集を見る';
    			// $args['vars']['_posts_query']->set( 'tax_query', false );
    			$args['vars']['_posts_query']->set( 'posts_per_page', 3 );
    			$args['vars']['_posts_query']->query( $args['vars']['_posts_query']->query_vars );
    
    			// 関連投稿が見つからない場合、または3件未満の場合のフォールバック処理
    			if ( $args['vars']['_posts_query']->found_posts < 3 ) {
    				$current_post_id = get_the_ID();
    				if ( ! $current_post_id ) {
    					global $post;
    					$current_post_id = $post ? $post->ID : 0;
    				}
    				$args['vars']['_posts_query'] = new WP_Query(
    					array(
    						'post_type'      => 'job-posts',
    						'posts_per_page' => 3,
    						'post__not_in'   => array( $current_post_id ),
    					)
    				);
    			}
    		}
    		return $args;
    	}
    );
    

    他の方の参考になると思うので、フォールバック処理の判定条件を追記しておきます。
    (表示件数は、デフォルトのままの4件表示の場合)

    // 1: シンプルに件数のみで判定。4件未満は全てフォールバック処理するので、常に4件表示される。
    if ( $args['vars']['_posts_query']->found_posts < 4 ) {
    
    // 2: 0件の時にだけフォールバック処理。1件~3件の時はそのまま表示。
    if ( ! $args['vars']['_posts_query']->have_posts() && $args['vars']['_posts_query']->found_posts < 4 ) {
    1
    Who liked:
    まーちゅう
    参加者
    401

    ありがとうございます!
    確認します。

    1
    Who liked:
    まーちゅう
    参加者
    401
    • 根本原因としては、$related_posts_query->have_posts()false になることで、関連投稿セクション全体が非表示になる
    • 条件を || 1 にすると強制的に表示できる

    以上のことを考慮して、関連投稿が少ない場合のフォールバック機能を追加することで表示できるようになりました。

    /**
     * 関連記事の取得クエリを操作する
     *
     * @param array $args テンプレート取得クエリ.
     * @return array テンプレート取得クエリ.
     */
    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/content/related-posts',
    	function ( $args ) {
    		$_post_type = get_post_type();
    		if ( 'post' === $_post_type || 'works-and-voices' === $_post_type ) {
    			$args['vars']['_entries_layout'] = 'simple';
    		}
    		if ( 'interview' === $args['name'] ) {
    			$args['vars']['_entries_layout'] = 'carousel';
    			$args['vars']['_title']          = '他の社員を見る';
    			$args['vars']['_posts_query']->set( 'tax_query', false );
    			$args['vars']['_posts_query']->set( 'posts_per_page', 10 );
    			$args['vars']['_posts_query']->query( $args['vars']['_posts_query']->query_vars );
    		}
    		if ( 'job-posts' === $args['name'] ) {
    			$args['vars']['_entries_layout'] = 'rich-media';
    			$args['vars']['_title']          = '他の募集を見る';
    			// $args['vars']['_posts_query']->set( 'tax_query', false );
    			$args['vars']['_posts_query']->set( 'posts_per_page', 3 );
    			$args['vars']['_posts_query']->query( $args['vars']['_posts_query']->query_vars );
    		}
    		return $args;
    	}
    );
    
    /**
     * 関連投稿のクエリ引数をカスタマイズ
     * interview、job-postsで関連投稿が少ない場合のフォールバック機能
     *
     * @param array $args WP_Query の引数配列
     * @return array 修正されたクエリ引数
     */
    add_filter(
    	'snow_monkey_related_posts_args',
    	function ( $args ) {
    		// グローバルの$postから現在の投稿情報を取得
    		global $post;
    
    		if ( ! $post ) {
    			return $args;
    		}
    
    		// 投稿IDと投稿タイプの型チェック
    		$post_id   = (int) $post->ID;
    		$post_type = (string) $post->post_type;
    
    		// 無効な投稿IDの場合は早期リターン
    		if ( $post_id <= 0 ) {
    			return $args;
    		}
    
    		// interview、job-postsのカスタム投稿タイプの場合のみ処理
    		if ( ! in_array( $post_type, array( 'interview', 'job-posts' ), true ) ) {
    			return $args;
    		}
    
    		// 投稿タイプ別の最小表示件数設定
    		$min_posts_config = array(
    			'interview' => 8,
    			'job-posts' => 3,
    		);
    
    		// 投稿タイプに応じた最小表示件数を取得
    		if ( ! isset( $min_posts_config[ $post_type ] ) ) {
    			return $args;
    		}
    		$min_posts = $min_posts_config[ $post_type ];
    
    		// 元の関連投稿を取得
    		$related_posts = get_posts( $args );
    
    		// カウント処理
    		if ( ! is_array( $related_posts ) ) {
    			$related_posts = array();
    		}
    		$related_count = count( $related_posts );
    
    		// 関連投稿が少ない場合はフォールバック処理を実行
    		if ( $related_count < $min_posts ) {
    			// フォールバック用のクエリ引数を作成
    			$fallback_args = array(
    				'post_type'      => $post_type,
    				'posts_per_page' => $min_posts,
    				'post__not_in'   => array( $post_id ), // 現在の投稿を除外
    			);
    
    			// 既に取得した関連投稿のIDを除外
    			if ( ! empty( $related_posts ) ) {
    				$existing_ids = wp_list_pluck( $related_posts, 'ID' );
    
    				// wp_list_pluck の結果が配列かチェック
    				if ( is_array( $existing_ids ) && ! empty( $existing_ids ) ) {
    					$fallback_args['post__not_in'] = array_merge( $fallback_args['post__not_in'], $existing_ids );
    				}
    			}
    
    			// フォールバック記事を取得
    			$fallback_posts = get_posts( $fallback_args );
    
    			// 安全性チェック
    			if ( ! is_array( $fallback_posts ) ) {
    				$fallback_posts = array();
    			}
    
    			// 元の関連投稿とフォールバック記事をマージ
    			$all_related_posts = array_merge( $related_posts, $fallback_posts );
    
    			// 重複を除去し、指定件数まで調整
    			$unique_posts   = array();
    			$post_ids_added = array(); // 連想配列として使用してO(1)検索に
    
    			foreach ( $all_related_posts as $related_post ) {
    				// 既に必要件数に達してたら早期終了
    				if ( count( $unique_posts ) >= $min_posts ) {
    					break;
    				}
    
    				// 投稿オブジェクトの存在チェック
    				if ( ! is_object( $related_post ) || ! property_exists( $related_post, 'ID' ) ) {
    					continue;
    				}
    
    				$related_post_id = (int) $related_post->ID;
    
    				// 重複チェック
    				if ( ! isset( $post_ids_added[ $related_post_id ] ) ) {
    					$unique_posts[]                     = $related_post;
    					$post_ids_added[ $related_post_id ] = true;
    				}
    			}
    
    			// 最終的な投稿IDの配列を作成
    			if ( ! empty( $unique_posts ) ) {
    				$final_post_ids = wp_list_pluck( $unique_posts, 'ID' );
    
    				// IDの配列が有効かチェック
    				if ( ! empty( $final_post_ids ) && is_array( $final_post_ids ) ) {
    					// 元のクエリ引数を更新
    					$args['post__in'] = $final_post_ids;
    					$args['orderby']  = 'post__in'; // post__inの順序を保持
    
    					// tax_queryを削除(post__inを使用するため)
    					unset( $args['tax_query'] );
    				}
    			}
    		}
    
    		return $args;
    	},
    	10,
    	1
    );
    
    0
    Who liked: No user
    まーちゅう
    参加者
    401

    「関連記事の取得クエリを操作する」のコードを削除しても変化無しでした。

    snow-monkey/template-parts/content/entry/footer/footer.php 内の、if ( get_option( 'mwt-google-matched-content' ) || $related_posts_query->have_posts() )if ( get_option( 'mwt-google-matched-content' ) || 1 ) に書き換えると、表示されました。

    0
    Who liked: No user
    まーちゅう
    参加者
    401

    一応コードも置いておきます。

    /**
     * _title_tag タグをh1に変更
     */
    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/header/site-branding',
    	function ( $args ) {
    		$args['vars']['_title_tag'] = 'h1';
    
    		return $args;
    	},
    	10,
    	1
    );
    2
    Who liked:
15件の投稿を表示中 - 1 - 15件目 (全266件中)

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。