メインコンテンツへ移動

Search results of "snow_monkey_get_template_part_args"

15件の結果を表示中 - 1 - 15件目 (全125件中)
  • 投稿者
    検索結果
  • まーちゅう
    参加者
    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
    • 根本原因としては、$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
    #145376
    アバター画像キタジマ タカシ
    参加者
    2607

    そのトピックは記事タイトル部分なので、ロゴ部分を変えたい場合は別の方法で対応する必要があります。

    これでどうでしょうか?

    add_filter(
    	'snow_monkey_get_template_part_args_templates/layout/header/' . ( get_theme_mod( 'header-layout' ) ?: 'center' ),
    	function( $args ) {
    		$args['vars']['_title_tag'] = 'h1';
    		return $args;
    	},
    	100
    );
    0
    Who liked: No user
    #145374
    まーちゅう
    参加者
    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:
    アバター画像キタジマ タカシ
    参加者
    2607

    すみません、改良してみましたがどうでしょうか?

    add_filter(
    	'snow_monkey_get_template_part_args',
    	function( $args ) {
    		// 記事一覧カテゴリー以外のテンプレートの場合は無視
    		if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) {
    			return $args;
    		}
    
    		// 投稿以外の場合は無視
    		if ( 'post' !== $args['name'] ) {
    			return $args;
    		}
    
    		if ( 'category' !== $args['vars']['_terms'][0]->taxonomy ?? null ) {
    			return $args;
    		}
    
    		// 全ての設定されたカテゴリーを返す
    		$raw_terms = get_the_terms( get_the_ID(), 'category' );
    
    		// 並び順指定用の配列を用意
    		$sorted_terms = array(
    			"category-17"     => null,
    			'category-slug-2' => null,
    			'category-slug-4' => null,
    		);
    
    		// 並び順を反映させた配列を生成
    		foreach ( $raw_terms as $raw_term ) {
    			$sorted_terms[ $raw_term->slug ] = $raw_term;
    		}
    
    		$args['vars']['_terms'] = array_filter(
    			$sorted_terms,
    			function( $value ) {
    				return is_object( $value );
    			}
    		);
    
    		return $args;
    	}
    );

    が、これ $sorted_terms に全部のタームのスラッグを記述しないといけないのがメンテナブルではないなぁという気がします。

    なのでタームの並び順を指定できるプラグインを試してみるのも手かなぁと思いました。

    ※しばらく開発されていないみたいなので積極的に採用して良いのかは微妙かもですが…

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2607

    フレックスボックスじゃないから order が効かないのかもしれません。PHP で、$args['vars']['_terms'] に格納した順番のまま画面に出力されるので、そこで調整すると良いかもです。

    下記のように書き換えてみるとどうでしょうか?

    add_filter(
    	'snow_monkey_get_template_part_args',
    	function( $args ) {
    		// 記事一覧カテゴリー以外のテンプレートの場合は無視
    		if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) {
    			return $args;
    		}
    
    		// 投稿以外の場合は無視
    		if ( 'post' !== $args['name'] ) {
    			return $args;
    		}
    
    		// 全ての設定されたカテゴリーを返す
    		$raw_terms = get_the_terms( get_the_ID(), 'category' );
    
    		// 並び順指定用の配列を用意
    		$sorted_terms = array(
    			'category-17',     // 1番目に表示したいタームのスラッグ
    			'category-slug-2', // 2番目に表示したいタームのスラッグ
    			'category-slug-4', // 3番目に表示したいタームのスラッグ
    		);
    
    		// 並び順を反映させた配列を生成
    		foreach ( $raw_terms as $raw_term ) {
    			$sorted_terms[ $raw_term->slug ] = $raw_term;
    		}
    
    		$args['vars']['_terms'] = $sorted_terms;
    		return $args;
    	}
    );
    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2607

    これでどうですかね?

    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/archive/entry/search',
    	function( $args ) {
    		$args['vars']['_entries_layout'] = 'rich-media';
    
    		return $args;
    	}
    );
    1
    Who liked:
    アバター画像キタジマ タカシ
    参加者
    2607

    ↑のコードは全部消して、下記のコードを貼り付けるとどうでしょうか?

    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/content/related-posts',
    	function( $args ) {
    		$args['vars']['_posts_query']->set( 'suppress_filters', false );
    		$args['vars']['_posts_query']->set( 'lang', get_locale() );
    		$args['vars']['_posts_query']->query( $args['vars']['_posts_query']->query_vars );
    		return $args;
    	}
    );
    2
    Who liked:
    #144610
    アバター画像キタジマ タカシ
    参加者
    2607

    CSS で消すのが一番簡単です。カスタム投稿タイプのスラッグが news だとすると、news の詳細ページには .single-news というクラスがつくので、下記の CSS で消せます。

    .single-news .wp-profile-box {
      display: none;
    }

    HTML の出力自体をなくしたいなら、フックを使う必要があります。

    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/content/entry/entry',
    	function( $args ) {
    		// 投稿タイプが news 以外のときは無視
    		if ( 'news' !== get_post_type() ) {
    			return $args;
    		}
    
    		// news のときはプロフィールボックスを表示させない
    		$args['vars']['_display_profile_box'] = false;
    
    		return $args;
    	}
    );
    1
    Who liked:
    #144121

    返信が含まれるトピック: ロゴのhtmlの書き換え方について

    アバター画像キタジマ タカシ
    参加者
    2607

    子テーマで普通にテンプレートパーツを上書きすることももちろん可能ですが、今後のメンテナンスを考えると My Snow Monkey プラグインか、子テーマを使っているなら子テーマの functions.php にコードを書くのが良いです。

    下記でどうでしょうか?

    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/header/site-branding',
    	function( $args ) {
    		$args['vars']['_title_tag'] = 'p';
    		return $args;
    	}
    );
    1
    Who liked:
    #143991
    アバター画像otomeweb
    参加者
    28

    表現が乏しかったです
    右カラムの設定で、公開日を表示にすれば、公開日で、更新日を表示にすれば更新日で表示されるとおもってました

    > そのコードをここに共有してもらえますか?

    
    /** 
     * 最新用語を更新日でソートする
    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/common/entries/entries',
    	function( $args ) {
    		// 最近の投稿ブロックのとき
    		if ( 'snow-monkey-blocks/recent-posts' === $args['vars']['_context'] ) {
    			// 並び順を変更
    			$args['vars']['_posts_query'] = new \WP_Query(
    				array_merge(
    					$args['vars']['_posts_query']->query,
    					array(
    						'orderby' => 'modified',
    						'order'   => 'DESC'
    					)
    				)
    			);
    		}
    		return $args;
    	}
    );
    */
    0
    Who liked: No user
    #143430
    akosan
    参加者
    33

    過去のフォーラムに似た質問があり試したところ解決したのでトピックを閉じます。
    失礼しました。

    最近の投稿でのカテゴリーラベルの表示順について

    
    add_filter(
    'snow_monkey_get_template_part_args',
    function( $args ) {
    // 記事一覧カテゴリー以外のテンプレートの場合は無視
    if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) {
    return $args;
    }
    
    // 投稿以外の場合は無視
    if ( 'post' !== $args['name'] ) {
    return $args;
    }
    
    $new_terms = array();
    $terms = get_the_terms( get_the_ID(), 'category' );
    foreach ( $terms as $term ) {
    $term_ids = get_ancestors( $term->term_id, 'category', 'taxonomy' );
    krsort( $term_ids );
    
    // チェックしたカテゴリーと先祖のカテゴリー情報をカテゴリーラベルとして使用
    foreach ( $term_ids as $term_id ) {
    $new_terms[ $term_id ] = get_term( $term_id, 'category' );
    }
    $new_terms[ $term->term_id ] = $term;
    }
    $args['vars']['_terms'] = $new_terms;
    
    return $args;
    }
    );
    
    1
    Who liked:
    #143290
    アバター画像キタジマ タカシ
    参加者
    2607

    あ、条件分岐が抜けていました…。is_single() で条件分岐させてください。

    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/common/page-header',
    	function( $args ) {
    		if ( ! is_single() ) {
    			return $args;
    		}
    
    		$default_image_url = get_template_directory_uri() . '/wp-content/uploads/2024/12/XXXX.jpeg';
    		$args['vars']['_image'] = '<img src="' . esc_url( $default_image_url ) . '" alt="' . esc_attr( get_the_title() ) . '">';
    		return $args;
    	}
    );

    画像が表示されないのは上記コードの中で指定している画像の URL が正しくないからなので、実際に表示させたい画像の URL になるように、コードを修正してみてください。

    1
    Who liked:
    #143279
    アバター画像キタジマ タカシ
    参加者
    2607

    投稿一覧はそのままで詳細ページでの表示だけ、ということは、あくまで「その記事の装飾としての画像を変えたい」ということだと思ったので、そのやり方を考えてみました。

    post_thumbnail_html で詳細ページだけ表示を変える場合、OGP 画像や関連記事などに使用される画像も変わってしまう可能性があるのでそれ以外を使ったやり方にしてみました。

    「アイキャッチ画像の表示」の選択肢によって対応が変わるので、一応それぞれのパターンについて考えてみました。

    ### 「アイキャッチ画像の位置」が「ページヘッダー」のとき

    // テンプレートパーツに画像の URL を差し替えるオプションがあるのでそれを使う。
    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/common/page-header',
    	function( $args ) {
    		$default_image_url = get_template_directory_uri() . '/wp-content/uploads/2024/12/XXXX.jpeg';
    		$args['vars']['_image'] = '<img src="' . esc_url( $default_image_url ) . '" alt="' . esc_attr( get_the_title() ) . '">';
    		return $args;
    	}
    );

    ### 「アイキャッチ画像の位置」が「コンテンツの上」のとき

    // オプションは無いのでテンプレートパーツ自体を書き換える。
    add_filter(
    	'snow_monkey_template_part_render_template-parts/content/eyecatch',
    	function( $html ) {
    		if ( ! $html ) {
    			return $html;
    		}
    
    		$default_image_url = get_template_directory_uri() . '/wp-content/uploads/2024/12/XXXX.jpeg';
    		$default_image     =
    		ob_start();
    		?>
    		<div class="c-eyecatch">
    			<img src="<?php echo esc_url( $default_image_url ); ?>" alt="<?php echo esc_attr( get_the_title() ); ?>">
    		</div>
    		<?php
    		return ob_get_clean();
    	}
    );
    1
    Who liked:
    #142974
    GONSY
    参加者
    846
    add_filter(
    	'snow_monkey_get_template_part_args_template-parts/loop/entry-summary/title/title',
    	function( $args ) {
    		$args['vars']['_title_tag'] = 'h3';
    		return $args;
    	}
    );

    こちらを my-snow-monkey.php に追記してみてください。

    2
    Who liked:
15件の結果を表示中 - 1 - 15件目 (全125件中)

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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