メインコンテンツへ移動

WordPressのブログ一覧ページ(投稿ページ)で特定カテゴリを除外、限定などフィルタして表示するカスタマイズ

0
Who liked: No user
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #146598
    TarCoon☆CarToon
    参加者
    63

    【お使いの Snow Monkey のバージョン】バージョン: 29.1.6

    【お使いの Snow Monkey Blocks のバージョン】バージョン 24.1.4

    【お使いの Snow Monkey Editor のバージョン】バージョン 11.0.3

    【お使いのブラウザ】Safari, Chrome

    【当該サイトのURL】https://tarcoon.me/

    ブログの投稿ページには全ての記事が一覧表示されるのですが、投稿ページのカテゴリをフィルタして、特定のカテゴリの投稿ページを記事一覧から除外したり、逆に特定のカテゴリの投稿ページのみを記事一覧に含めるためのカスタマイズ方法を教えて欲しいです。

    ✔︎ やりたいこと
    下記画像で設定している投稿ページ(https://tarcoon.me/jp/media/blog/)で、一部の親カテゴリから下層のカテゴリ全てを非表示にしたい。
    ここで設定しているページ

    1.通常では全ての記事が表示されてしまいます。

    2.秘密の記事を非表示にしたいです。

    ✔︎ 理由
    会員限定の記事を記事一覧には表示させたくない。記事の存在すら知られたくない。

    よろしくお願いいたします。

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

    この「極秘」の記事は、どういう方法で会員限定にされていますか?
    この「極秘」と同じ方法で会員限定にしている記事を全て非表示にしたいということであれば、単純にカテゴリーで絞るより良い方法があるかもなと思いまして…。

    あと、現状、僕のパソコンで https://tarcoon.me/jp/media/blog/ を開いても表示されていないです。

    0
    Who liked: No user
    #146600
    TarCoon☆CarToon
    参加者
    63

    ありがとうございます。

    ▶︎この「極秘」の記事は、どういう方法で会員限定にされていますか?
    → 現在は下書きのままにしているだけです。
    ▶︎こあと、現状、僕のパソコンで https://tarcoon.me/jp/media/blog/ を開いても表示されていないです。
    →現在は下書きにしているのですが、このリンクのページは表示されますか?
    *本来は「このように非会員には表示されない状態にしたい」という意図を画像で共有したかったのですが、かえってお気遣いをおかけしてしまい、申し訳ありません。

    以上のとおり、現時点で会員限定設定の記事はありません。
    記事内では「Snow Monkey Member Post」や「Snow Monkey Editor」の表示設定を使い、ブロック単位で会員限定表示にしていますが、記事全体を非会員から見えないようにしたいと考えています。

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

    なるほどです。一応、ページ自体を「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 );
    	}
    );
    1
    Who liked:
    #146605
    TarCoon☆CarToon
    参加者
    63

    ありがとうございます。
    ひとまず、一覧画面に表示されなくなりました。

    ただ、管理画面(サイトにログインしている人)でも非表示になってしまいました。

    0
    Who liked: No user
    #146607
    TarCoon☆CarToon
    参加者
    63

    すみません。今、ページ自体を「Snow Monkey Member Post」でメンバー限定にできることを知りませんでした。

    キタジマさんの
    ページ自体を「Snow Monkey Member Post」でメンバー限定にしたとして、
    という部分を読み返して、あれ?と思いながら今調べて記事全体をメンバー限定にできることを知りました。

    記事全体をメンバー限定にすることで、問題なく対応されているようです。
    ありがとうございます。

    しばらく、この状態で様子を見ます。

    1
    Who liked:
    #146627
    TarCoon☆CarToon
    参加者
    63

    キタジマさんありがとうございます。
    様子を見たところ、
    ログアウト状態で、ブログの一個前の古い投稿や、次の投稿にメンバー限定の記事が表示されてしまいます。
    また関連記事にも表示されてしまいます。
    これを見えなくするのは難しいのでしょうか?

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

    前後ナビについては下記のコードで非表示にできそうでした。
    ただ、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 );
    	}
    );
    1
    Who liked:
    #146630
    TarCoon☆CarToon
    参加者
    63

    ありがとうございます。

    SQL を直接書き換えるので、個人的にはあんまり積極的には使いたくないかなぁという印象です。

    とのことを聞いて少し考えようと思います。
    素人にも危うさが伝わるアドバイスありがとうございます。

    動作が重くなる可能性があること、意図しない部分にも適用されてしまう可能性があること

    という点もありがとうございます。
    ただでさえ重たいので、少し躊躇してしまいますね。
    こう言ったご意見も大変ためになります。ありがとうございます。

    色々試して、しばらく様子を伺いたいと思います。

    1
    Who liked:
    #146714
    TarCoon☆CarToon
    参加者
    63

    キタジマさん。ありがとうございました。
    問題が解決しましたので、こちらのトピックを閉じさせていただきます。

    またよろしくお願いいたします。

    1
    Who liked:
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • トピック「WordPressのブログ一覧ページ(投稿ページ)で特定カテゴリを除外、限定などフィルタして表示するカスタマイズ」には新しい返信をつけることはできません。

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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