ある1つのカテゴリーの新着記事を1件だけ全文掲載をさせたい

Simplicityの特徴 › フォーラム › テーマファイルのカスタマイズに関する質問など › ある1つのカテゴリーの新着記事を1件だけ全文掲載をさせたい

  • このトピックには24件の返信、2人の参加者があり、最後にさとみにより10年、 3ヶ月前に更新されました。
24件の返信スレッドを表示中
  • 投稿者
    投稿
    • #42709
      さとみ
      ゲスト

      はじめまして。

      とても使いやすいテンプレートに感謝しています。

      トップページに、ある1つのカテゴリーの新着記事を1件だけ全文掲載をさせたいのですが、どのようにすればいいのでしょうか?

      アドバイスをいただけると嬉しいです!
      よろしくお願いします。

    • #42711
      Hidekichi
      ゲスト

      ある1つのカテゴリー、あるいはその記事というのが、決まっているのであれば、カスタマイザーから「最初だけ本文表示」とその記事の編集画面の公開状態で、「先頭に固定表示」にすれば、言われているような事は実現できますが、毎回変わるという場合は、その変わり方がどういうものかの仕様が必要かと思います。

      つまり、カテゴリーが毎回ランダムで、その中の最新投稿なのか、Aというカテゴリーの最新投稿なのか等によってやり方が異なるからです。

      記事が決まっているなら、最初に書いた方法でやるのが簡単かと思います。

    • #42720
      さとみ
      ゲスト

      Hidekichiさん

      どうもありがとうございました。
      説明不足ですみませんでした。

      Aというカテゴリーの最新投稿を、トップページに表示をしたいので、Hidekichiさんの仰るとおり、カスタマイザーから「最初だけ本文表示」とその記事の編集画面の公開状態で、「先頭に固定表示」の2つの設定で表示ができました。

      この方法だと、Aというカテゴリーの最新投稿の下に、10件の直近の記事の一覧リストが表示されますが、これを非表示にするには、どうすればいいのでしょうか?

      もし可能でしたら教えていただけると嬉しいです。よろしくお願いします。

    • #42797
      アバター画像わいひら
      キーマスター

      ちょっと文字だけではイメージが湧かないので、実際のページのURLを掲載していただいて見せていただくことは可能でしょうか?

    • #42810
      さとみ
      ゲスト

      わいひらさん

      ありがとうございます。

      http://yahooauction.wp.xdomain.jp

      やりたいことが3つあります。

      ①「本誌」カテゴリーの最新記事をトップページに1件だけ表示したい。
      ② トップページのみ、タイトル下の日付とカテゴリー名(帯も)を非表示にしたい。
      ③ 「本誌」カテゴリーの最新記事の下に、最新記事が10件表示されますが、非表示にしたい。その下の矢印もできれば非表示に。

      以上です。

      すでに試したこと。

      カスタマイザーから「最初だけ本文表示」とその記事の編集画面の公開状態で「先頭に固定表示」の2つの設定を行い、①はできました。

      記事の下にSNSボタンが表示されなかったので、以前のフォーラムを参考に、表示することができました。

      ②と③のやり方をご教授いただけないでしょうか?
      よろしくお願いします。

    • #42817
      Hidekichi
      ゲスト

      詳しく書いてもらいましたが、ちょっとまとめましょうか。

      まずすぐにでもできる事で2についてはcssで消せますが、何かしら検索した時と、他のカテゴリを選んだ時などで、同様にリスト一覧が出た時はどうされますか?

      トップページだけに質問の状態を再現したいのか、検索やアーカイブの状態でリスト表示になった時もそうしたいのかでcssの書き方が異なります。

      トップページでリスト表示の時に、タイトル下(日付、カテゴリ等 → .post-meta)を消したいと言うのであれば、

      .home #list .post-meta {
        display: none;
      }

      これで消せますが最初の1件の.post-metaも消えますので、最初の1件を残すなら、

      .home #list .entry .post-meta {
        display: none;
      }

      こういう感じになります。これは、bodyに.homeというクラスがある時(トップページの時)に有効なので、他の検索時やカテゴリでリスト一覧が表示される時には表示されると思います。どんなときも、リスト一覧が出る時に.post-metaを非表示にしたいのであれば、

      #list .post-meta {
        display: none;
      }

      でしょう。ここらはその仕様をどのように考えておられるかで変わります。

      1と3についてですが、レスを頂いた内容から読むと、トップページは、あるカテゴリ「本誌」の最新投稿が1件だけ表示され、同カテゴリ内の他のリスト表示は不要ということで良いのでしょうか?
      つまりは、固定ページで任意のページをトップページにするようなことを、あるカテゴリの最新記事1件にしたいと言うことで間違いはないですか?

      で、その時の状態ですが、もしそう言う状態であると、最新の記事以外はリストで出てこないので常にカテゴリ一覧、検索、あるいはタグからそれら記事を探さなくてはならなくなりますが、ここはどのように考えておられますか?

      トップページだけリストとおそらくページャーが要らないと言うのであれば、先ほどのcssに手を加え

      .home #list .entry {
        display: none;
      }

      で良いのではなかろうかと思ったりもします。いずれもcssは子テーマstyle.cssに書きます。

      僕が心配すると言うか、利便性を見て、

      1. 誰かがトップページに訪れる、最初が本文である場合はまずそれを見る
      2. これはリストの一部なので関連ページは表示されない
      3. サイドバーには最新記事であったり、新着が表示されていたとして、訪れた人はそこから他の記事を探すもしくは、カテゴリ、検索やタグ等から探すしかできない

      こういう状態になるかと思うので、パッと記事タイトルを見て、これも読んでみようかというような事が無くなり、直帰率が高くなってしまうのではなかろうかと思ったりもするわけです。

      何かしらの記事を見て、その記事の下に関係する記事が出るというのは案外重要なことで、興味を持った内容の記事に関係する(同カテゴリのランダムで選ばれた)記事は「ついでに読む」の対象にとても高い確率でなります。

      今回のもの(cssで消す状態)はそういう事になりません。まぁウィジェットを利用すればできなくもないと思うんですけどね。あと、記事自体に飛べば関連記事は出ますから、その全てではないです。

      こういうのも考慮しつつ、いわゆる「固定ページで何かしらの固定ページをトップページにする」というのを「通常投稿の最新の1件」で実現したいと言う事でよいかどうか、ここらを確認しておきたい所です。

    • #42818
      Hidekichi
      ゲスト

      ちなみに、「固定ページで何かしらの固定ページをトップページにする」と言うのは、simplicity
      この公式サイトでもあるように、常にそのページをトップページにするということです。

      これは何かしらを「固定ページ」で書いて、wordpressの表示設定からその記事を選ぶことでできます。カスタマイザーからもできたと思います。

    • #42845
      さとみ
      ゲスト

      Hidekichiさん

      cssでの消し方についてありがとうございました。
      また、色々な想定を考えていただきありがとうございます。

      月に1度にカテゴリ「本誌」の記事を1本ずつ増やしていこうと思っているので、トップページは「固定ページ」じゃない方がいいかなと思いました。

      トップページは、あるカテゴリ「本誌」の最新投稿が1件だけ表示され、同カテゴリ内の他のリスト表示は不要ということで良いのでしょうか?

      何かしらの記事を見て、その記事の下に関係する記事が出るというのは案外重要なことで、興味を持った内容の記事に関係する(同カテゴリのランダムで選ばれた)記事は「ついでに読む」の対象にとても高い確率でなります。

      Hidekichiさんのアドバイスを踏まえて、以下のカスタマイズができればと思っています。

      トップページには、「本誌」カテゴリのみのリストを4件表示したいです。具体的には、カテゴリ「本誌」の最新投稿の全文を1件だけ表示して、同カテゴリ内の他のリストをその下に3件表示したいのですが、アドバイスをいただけないでしょうか。
      「本誌」カテゴリ以外のリストは不要です。

      Hidekichiさんのおっしゃるように訪問者の利便性を考えないとダメですよね。

    • #42851
      Hidekichi
      ゲスト

      おそらく、

      function change_toplist( $query ) {
      	if ( is_admin() || ! $query->is_main_query() ) {
      		return;
      	}
      	
      	if ( $query->is_home() ) {
      		$query->set( 'posts_per_page', 4 );
      		$query->set( 'cat', '4' ); //カテゴリ指定
      		return;
      	}
      }
      add_action( 'pre_get_posts', 'change_toplist' );

      こういう感じかと思います。カテゴリの名称でもイケる…かと思ったんですが、いけなさそうなので、カテゴリのIDはご自身で調べて下さい。

      ダッシュボードから投稿→カテゴリで、カテゴリ一覧が出ます。その中から任意のカテゴリを選んで、遷移した画面のアドレス欄に、....&tag_ID=4&....とあれば、そのカテゴリのIDは4ということです。

      テストの環境が記事数が少ないので、2ページ以降が本来のリストの件数拾えるかは不明ですが、このコードで2ページ目になっても最初だけ本文にはならず、きちんとリスト表示はされていました。

      ということで、上記コードを子テーマfunctions.phpに追記して、.post-metaの非表示部分はこの2つ前のレスのコードを参考に、子テーマstyle.cssに追記してみて下さい。

      で、リスト表示はカスタマイザーから最初だけ本文と言う感じかと思います。
      多分これでイケるんじゃなかろうかと思います。
      問題が出た場合(思っているのと違ったというような場合)は、子テーマfunctions.phpのこのコード自体を削除するか、コメントアウトすれば良いかと思います。

      ただ、前に書いたように、あるカテゴリで絞り込むとその他のカテゴリが選ばれなくなる可能性は高くなります。そのために、サイドバーやグローバルナビ、あるいはフッターから等、色々とまわりでそれら除外されたカテゴリーへの誘導をはかることが必要になるかと思います。ここらは注意して下さい。

      何かしらコードが間違っていれば、誰かが追加で助言してくれるでしょう(笑)

    • #42854
      さとみ
      ゲスト

      Hidekichiさん

      カテゴリーIDを指定したら、バッチリ出来ました!
      本当にありがとうございました。とても勉強になりました。

    • #42855
      さとみ
      ゲスト

      Hidekichiさん

      カテゴリーIDを指定したら、バッチリ出来ました!
      本当にありがとうございました。とても勉強になりました。

    • #42856
      さとみ
      ゲスト

      何度もすみません。

      トップページにリスト表示で全文表示はできたのですが、SNSの件数がぐるぐる回ってたままで取得できません。

      http://yahooauction.wp.xdomain.jp/

      記事の下にSNSボタンが表示されなかったので、以前のフォーラムを参考に、entry-body.phpを変更したのですが。何か設定が間違っているのでしょうか?

    • #42866
      Hidekichi
      ゲスト

      > entry-body.phpを変更したのですが

      どこをどう変更しましたか?
      以前のフォーラムにしても、内容を見るとcssの変更だけなので、entry-body.phpを変更するところは無いかと思うんですが。

      確かにリンク先のサイトを見ると、何かしら途中で止まっているように思えます。
      entry-body.phpの変更点を元に戻して、「記事の下にSNSボタンが表示されなかった」という状態まで戻してもらう方が良いかもしれません。
      戻せないようであれば、親テーマなりを再インストールとか、もしentry-body.phpを子テーマにコピペしていたらそれを削除とかで戻せるかと思います。

      で、基本的に、今回行ったカスタマイズはループの内容を書き換えただけです。最初だけ全文表示と言う仕様的に「記事の下にSNSボタンが表示されなかった」は正しいのかも知れません。

      シェアボタンは記事に対して行っているので、対象となるトップに出した記事のページではシェアボタン出てますよね?
      あくまでトップにある記事全文はリストの中の一つです。それを全文表示にしているだけなのでシェアボタンを設置するとすると、常にトップページをシェアすることになって、そのリンクは内容が変わるということになりますよね?

      仮に、「あけましておめでとうございます」と言うトップページの全文表示のものをシェアしましたとなっても時間がたって、新しい記事が投稿されたらそのリンクは「メリークリスマス」になってる可能性もあるわけです。それは逆にオカシイですよね?

      トップページのシェアというのはつまりはサイトのフォローのことです。なので、記事に対して行う本来のシェアの機能は、トップページで全文表示されている記事のタイトルをクリックして表示される本来の記事ページに機能しているというわけです。
      これなら、SNSに「あけましておめでとうございます」と言うタイトルで記事をシェアした場合、常にそのSNSのリンクからは「あけましておめでとうございます」の記事が表示されるわけです。

      なので、解決策としては、変更した所を元に戻すということかと思います。
      トップページでシェアも出したいということになると、その記事が単体である必要があるので、その場合は面倒くさいですが、トップページを固定ページで作成して、更新する都度、トップページにあたる固定ページにリンクを貼り直すと言う必要があるかと思います。

      それが、wordpressの本来の動作であり、Simplicityの機能が無理なく使えるようになるのではなかろうかと思います。ただし、確か管理人だけにシェアボタンを表示すると言う機能があったと思うので、リスト中にシェアのリンクを出せないわけではないだろうと思います。
      ここらは、「トップページのリストで全文表示をした時にその全文表示にシェアボタンをだすには?」と言う内容で新たに質問されたほうが良いかも知れません。

      基本的に僕は、前述のようなことから動作的には問題ないと思いますので、無理してシェアボタンを出す必要もないのではないかなぁと思います。
      どうしても気になる場合は、moreタグを入れて、全文表示の途中で「続きを読む」を表示し、続きを読む時に記事へ強制的にリンクさせると言う手法しか無いかと思います。moreタグは任意の箇所で入れられるので効果的に使えば案外良い効果が出るかも知れません。

      単純に、トップページのリンクをクリックして通常通り記事を読んでいるのと変りはありませんが、本屋で最初の数ページを読んでから購入すると言うような意味合いで、記事の冒頭を表示すると考えれば、意味はあるだろうと思います。

    • #42867
      Hidekichi
      ゲスト

      まぁ、トップページのタイトルにその記事へのリンクはあるわけですからシェアボタンを出せないわけではないと言う感じかと思います。ただしそれは記事本体のアドレスをシェアすることになるので、SNSから訪問する人はトップページではなく、記事ページへアクセスすることになるということかと思います。

      ここらは、また色々と考える必要があると思うので、どうしてもそれが必要だという場合は、別トピックで質問されたほうが良いかと思います。

    • #42868
      アバター画像わいひら
      キーマスター

      Simplicityは仕様上、トップページのシェアボタンは動作しないようになっています。
      基本的にトップページでは、シェアボタンをスタイルシートで非表示にした方が良いのかもしれません。

    • #42873
      さとみ
      ゲスト

      Hidekichiさん
      わいひらさん

      ありがとうございます。以前のフォーラムのリンク間違えてしまってました。すみませんでした。
      お二人のアドバイスに従って、トップページでのシェアボタンはやめることにします。

      最後に1点質問してもいいですか?

      Hidekichiさんから教えてもらったコードを、子テーマfunctions.phpに追記したところ、PCでは最新記事1件が全文表示で、その下に3件リスト表示されます。これはうまく行っているのですが、レスポンシブで見ると(スマホで見ると)、最新記事1件の下に10件の表示になりますが、どこを修正したらいいのでしょうか?

      PC同様の表示にしたいのです。

    • #42877
      Hidekichi
      ゲスト

      親テーマfunctions.phpにて、

      //モバイルで1ページに表示する最大投稿数を設定する
      if ( !function_exists( 'set_posts_per_page_mobile' ) ):
      function set_posts_per_page_mobile( $query ) {
        if ( is_mobile() && !is_admin() && $query->is_main_query() ) {
            $query->set( 'posts_per_page', get_posts_per_page_mobile() );
        }
      }
      endif;
      add_action( 'pre_get_posts', 'set_posts_per_page_mobile' );

      こういうのがあります。これが読み込まれているのでモバイルでややこしいことになっているかと。
      なぜこの設定があるのかはわいひらさんが答えてくれると思うので、その理由を聞いてからどうするべきかの判断になるかと思います。

      見てわかるように子テーマに書いたものと基本同じ書き方なので、ここらをremove_actionして子テーマで新たに変更したものを追記すればよいわけですが、「なぜこの設定があるのか」ここらが問題点です。書き換えて副作用があるとあれなので。

    • #42968
      Hidekichi
      ゲスト

      わいひらさんが、おそらくこのトピックを見落としていると思うので、上げると同時に、もういっそのことこうすればよいのではと言う事で、前の子テーマfunctions.phpに追加したソースに加えて、

      remove_action('set_posts_per_page_mobile');
      function change_home_posts_per_page( $query ) {
      	// 管理画面、またはメインのループでない場合中断
      	if ( is_admin() || ! $query->is_main_query() ) {
      		return;
      	}
      	
      	// トップページは表示件数を5件にする
      	if ( $query->is_home() ) {
      		$query->set( 'posts_per_page', 4 );
      		$query->set( 'cat', '4' );
      		return;
      	}
      	
      	if ( is_mobile() ) {
      		$query->set( 'posts_per_page', get_posts_per_page_mobile() );
      		$query->set( 'cat', '4' );
      		return;
      	}
      }
      add_action( 'pre_get_posts', 'change_home_posts_per_page' );

      こんな感じにして、カスタマイザー→レイアウト(全体・リスト)→モバイルで1ページに表示する最大投稿数(デフォルト:10)を4にすると言う感じでどうでしょうか?

      何か問題があればわいひらさんが答えてくれるだろうと思います。

    • #42971
      アバター画像わいひら
      キーマスター

      モバイルでの表示数を変更するには#42968でhidekichiさんが書かれているように、テーマカスタマイザーの設定から行えると思います。
      これは、モバイルでリストをあまり長く読み込ませたくない人用の設定です。
      特に書き換えて問題ないと思いますよ。
      関数を書き換える場合は、子テーマに同じ関数を書くだけでオーバーライドされると思います。
      コードでいうと、子テーマに以下のように書くだけでいいかと思います。

      function change_home_posts_per_page( $query ) {
        //カスタマイズコード
      }
    • #43004
      Hidekichi
      ゲスト

      と言うことは、前回のremove_actionが何かトチ狂ったのかのように間違えてましたが、

      remove_action('pre_get_posts','set_posts_per_page_mobile');
      function change_home_posts_per_page( $query ) {
      	// 管理画面、またはメインのループでない場合中断
      	if ( is_admin() || ! $query->is_main_query() ) {
      		return;
      	}
      	
      	// トップページは表示件数を5件にする
      	if ( $query->is_home() ) {
      		$query->set( 'posts_per_page', 4 );
      		$query->set( 'cat', '4' );
      		return;
      	}
      	
      	if ( is_mobile() ) {
      		$query->set( 'posts_per_page', get_posts_per_page_mobile() );
      		$query->set( 'cat', '4' );
      		return;
      	}
      }
      add_action( 'pre_get_posts', 'change_home_posts_per_page' );

      こう書くか、

      function change_toplist( $query ) {
      	if ( is_admin() || ! $query->is_main_query() ) {
      		return;
      	}
      	
      	if ( $query->is_home() ) {
      		$query->set( 'posts_per_page', 4 );
      		$query->set( 'cat', '4' ); //カテゴリ指定
      		return;
      	}
      }
      
      function change_home_posts_per_page( $query ) {
      	if ( is_admin() || ! $query->is_main_query() ) {
      		return;
      	}
      	
      	if ( $query->is_mobile()) {
      		$query->set( 'posts_per_page', get_posts_per_page_mobile() );
      		$query->set( 'cat', '4' ); //カテゴリ指定
      		return;
      	}
      }
      add_action( 'pre_get_posts', 'change_home_posts_per_page' );
      add_action( 'pre_get_posts', 'change_toplist' );

      で、行けそうです。書き換えて問題ないということで、両方共でテストしてみましたが、PC・モバイル共に同じ表示になりました。

    • #43044
      さとみ
      ゲスト

      Hidekichiさん

      コードありがとうございます。
      PC・モバイルで同じ表示になりました。

      イメージ通りにカスタマイズができ感謝しています。

      WordPressが楽しくなってきたので、これからコードも勉強していこうと思います。ありがとうございました。

    • #43045
      Hidekichi
      ゲスト

      あ、今見たら#43004の最初のコード、

      if ( is_mobile() ) {
      になってますね(汗)

      正しくは、
      if ( $query->is_mobile()) {
      です。

    • #43136
      さとみ
      ゲスト

      Hidekichiさん

      ありがとうございます。早速修正しました。

      もう1つ質問していいでしょうか?

      #43004のコードを追加したので、トップページのリストは、5件表示されています。ページャーを残すことにした場合、ページャーをクリックして2ページ目以降の表示を10件のリスト表示にすることは可能でしょうか?

      もし可能でしたらやり方を教えていただけると嬉しいです。
      よろしくお願いします。

    • #43141
      Hidekichi
      ゲスト
      function set_posts_per_page_mobile( $query ) {
      	return;
      }
      function change_home_posts_per_page( $query ) {
      	// 管理画面、またはメインのループでない場合中断
      	if ( is_admin() || ! $query->is_main_query() ) {
      		return;
      	}
      	
      	if (! is_paged()) {
      		if ( $query->is_home() ) {
      			$query->set( 'posts_per_page', 1 );
      			$query->set( 'cat', '4' );
      			return;
      		}
      		
      		if ( $query->is_mobile() ) {
      			$query->set( 'posts_per_page', 1 /*get_posts_per_page_mobile()*/ );
      			$query->set( 'cat', '4' );
      			return;
      		}
      	} else {
      		if ( $query->is_home() ) {
      			$query->set( 'posts_per_page', 3 );
      			$query->set( 'cat', '4' );
      			return;
      		}
      		
      		if ( $query->is_mobile() ) {
      			$query->set( 'posts_per_page', 3 /*get_posts_per_page_mobile()*/ );
      			$query->set( 'cat', '4' );
      			return;
      		}
      	}
      }
      add_action( 'pre_get_posts', 'change_home_posts_per_page' );

      さっき試していたんですけれども、remove_action('pre_get_posts','set_posts_per_page_mobile');が効いていないようだったので、親テーマのset_posts_per_page_mobileをオーバーライド(上書き)して、単純に何もせずreturnするようにし、新たに if (! is_paged()) {を加えました。

      ! is_paged()は 2ページ目以降でない時、つまり1ページ目と言うことですが、上記のスクリプトでは、ウチのテスト環境での記事数が少ないために、1ページ目は1件、それ以降(elseブロック)は3件と言うことでやってます。

      1ページ目はこれまでの設定で、全文表示とリスト表示1件となって、2ページ以降はリスト表示3件と言う感じです。
      2ページ以降(elseブロック)の中のis_mobileで、カスタマイザーの設定である get_posts_per_page_mobile() もコメントアウトして、数値を入れてあります。2ページ以降の $query->set( 'posts_per_page', 3 ); の数値を任意の数値に変えることでリスト表示のアイテム数を変えることができると思います。

      2ページ以降(elseブロック)を無くしたらデフォルトの設定になるかなぁと思ったんですが、やはり同じように設定しないと404が出てきましたので、設定してあります。

      何やらややこしくなりましたが、多分これで思われているような動作をするのではなかろうかと思います。

    • #43147
      さとみ
      ゲスト

      Hidekichiさん

      ありがとうございます。
      思っているように動作しました!本当にありがとうございました!

24件の返信スレッドを表示中
  • トピック「ある1つのカテゴリーの新着記事を1件だけ全文掲載をさせたい」には新しい返信をつけることはできません。
スポンサーリンク
アドセンス(大)
アドセンス(大)