• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WordPressの質問(q10013003)の続)

WordPressの質問(q10013003):$offsetのコントロール方法は?

このQ&Aのポイント
  • WordPressの質問(q10013003)の続【投稿ページ その3】で、break,continue構文以外で$offsetをコントロールする方法について教えてください。
  • 質問内容を要約すると、$offsetをコントロールするための良い方法を探しているとのことです。
  • 回答としては、データベースから取得したRSSを分けて保存し、そのまま出力する方法をおすすめします。この方法ならループをせずに$offsetをコントロールできます。また、画像1,画像2,画像3のURLについても同じサイトから取得する予定であれば、storage_rss.phpと処理を分ける必要はありません。SQLから操作するかどうかは詳細がわかりませんが、必要に応じて使い分ければ良いでしょう。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.85

ところで、確認したいことがあります。 front-page.phpとpage-secound.phpとpage-third.phpの違いは、画像数が1か2か3でその一覧表示スタイルと、RSSの取得元だけで、ランキング表示その他は、それぞれの画像数の記事になるだけで、デザインは同じですよね。 それと、3パターンあると言われていた、アーカイブとカテゴリーと検索は、その一覧表示のデザインがfront-page.phpとpage-secound.phpとpage-third.phpのように異なるだけで他は同じですよね。

php_learn
質問者

お礼

ファイル自体を識別させて表示方法の切り替えを行うのか、それぞれの機能の箇所で分岐を行うのかどちらかになると思われます。

php_learn
質問者

補足

おっしゃる通りです。それぞれfront-page.php,page-secound.php,page-third.phpと同じデザイン記事表示になります。 画像数が異なるため、間接的にカスタムフィールドで表示ファイルの切り替えを行うように考えています。

すると、全ての回答が全文表示されます。

その他の回答 (84)

  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.14

【投稿ページ その6】 タイトルが表示されない原因がもうひとつありました。 HTMLコメントのタグ終了がありませんでした。 ---- <!--タイトルない場合は非表示--> ----

php_learn
質問者

お礼

下記サイトにif分岐で重複を回避できそうな記述があるのですが、moreタグの分岐コードがよくわからない状態です… https://h2ham.net/wordpress-excerpt-and-content/

php_learn
質問者

補足

コンテンツが2重に表示されてしまい原因が分かりません。 どうやら投稿に書いたものが別に出力されてしまうようです。 下記の方法でも試してみましたがダメでした。 何か対策はありますでしょうか? https://atelierroi.com/tecnicalnote/wpdesign/contentsplit/ ※該当ファイル https://wandbox.org/permlink/y5EW7eRhas4NdXIK <!-- 記事前半 --> <div class="t_h t_i" >7: <span style="color: green; font-weight: bold;">テスト1</span> <span style="color: gray;"> 2022/06/25(土) 20:29:32.61 ID:7Wu8zs2o</span></div> <div class="t_b t_i" style="font-weight:bold;font-size:18px;line-height:27px;color:#db7093;"> <span style="color:mediumblue;" class="anchor"></span>テスト2 <br /> テスト3 </div><br /> <div class="t_h t_i" >20: <span style="color: green; font-weight: bold;">テスト4</span> <span style="color: gray;"> 2022/06/25(土) 20:31:59.44 ID:x3DyAWsk</span></div> <div class="t_b t_i" style="font-weight:bold;font-size:18px;line-height:27px;color:#800080;"> <span style="color:mediumblue;" class="anchor">テスト5</span> <br /> テスト6 </div><br /> <!--more--> <!-- 記事後半 --> <div class="t_b t_i" style="font-weight:bold;font-size:18px;line-height:27px;color:#800080;"> <span style="color:mediumblue;" class="anchor">テスト5</span> <br /> テスト6 </div><br /> <div class="t_h t_i" >26: <span style="color: green; font-weight: bold;">テスト7</span> <span style="color: gray;"> 2022/06/25(土) 20:33:18.62 ID:tH7liN79</span></div> ※表示画面 https://imgur.com/IVGIjF9.jpg https://imgur.com/HVV2ooA.jpg https://imgur.com/sHLPrwc.jpg https://imgur.com/k5ttPi2.jpg

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.13

【投稿ページ その5】 ・single.phpについて、記事の前半にタイトル、日付け、カテゴリー、コメント数を表示させたいのですがコードに問題はありますでしょうか? タイトルが表示されていません。 第三引数をtrueにしてください。 ---- <?php the_title( '<h2 class="postpage-title">', '</h2>',true); ?> ----

php_learn
質問者

補足

ありがとうございます。タイトルを忘れているときは非表示にしたい場合でもtrueなのでしょうか?

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.12

【投稿ページ その4】 ・single.phpについて、記事と記事の間にRSS+広告を設置するコードを実装している途中なのですが、RSSを挟むことに苦戦しています。 参考サイトのままで大丈夫そうな気がします。 ---- <?php $content = get_the_divided_content(); ?> <?php echo $content['before']; ?> <?php echo $trisect_rss_feed[1]; ?> <?php echo $content['after']; ?> ----

php_learn
質問者

補足

RSSがなかなか格納されず待機しているのですが、RSSの格納タイミングはRSS元の記事が更新されて新たなRSSが反映されたときでしょうか?

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.11

【ヘッダー その1】 ・header.phpについて、タグを修正している際に気付いたのですが該当コードの<span>と<a>が不自然に感じます。問題ないでしょうか? どのように不自然と感じましたか。 似たような記述がこれまでもたくさんあったので不自然さは感じません。 たぶんですが、問題ないと思います。

php_learn
質問者

補足

<a href="'.get_comments_link().'" class="count comment">'.$comments.'</a> classのつけ方に違和感があるのですが、問題ないのでしょうか? ※該当コード <!--リンククラス付きのコメント数を追加--> <?php $num_comments = get_comments_number(); if ($num_comments == 0) { $comments = ('No Comments'); // 댓글이 없을 경우 } elseif ( $num_comments > 1 ) { $comments = $num_comments . (' Comments'); // 댓글이 2개 이상일 경우 } else { $comments = __('1 Comment'); // 댓글이 1개일 경우 } $write_comments = '<span class="singlecomments"><a href="'.get_comments_link().'" class="count comment">'.$comments.'</a></span>'; echo $write_comments; ?>

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.10

【RSS その40】 ・順番に出力していきたいのですが、echoとhtml文で統一する必要があります。 どちらに合わせるのが適切でしょうか? 統一する必要はないと思います。 統一したい、と言うのであれば、書きやすい方、見やすい方、などで選んでいただいていいと思います。 コードの意味を正しく理解して、ご自身でどちらにでも対応できるようになっていただければそれでいいです。 echoにするのが難しいようでしたらhtmlのままの方がエラーにならなくてすみます。 ・htmlに合わせる場合、下記のように1つ1つphpでくくるのが適切でしょうか? はい、適切です。

php_learn
質問者

補足

回答ありがとうございます。 修正を加えたうえでいくつかお聞きしたいことがありましたので、よろしくお願い致します。 1,header.phpについて、タグを修正している際に気付いたのですが該当コードの<span>と<a>が不自然に感じます。問題ないでしょうか? ※header.php50行目 <!--リンククラス付きのコメント数を追加--> <?php $num_comments = get_comments_number(); if ($num_comments == 0) { $comments = ('No Comments'); // 댓글이 없을 경우 } elseif ( $num_comments > 1 ) { $comments = $num_comments . (' Comments'); // 댓글이 2개 이상일 경우 } else { $comments = __('1 Comment'); // 댓글이 1개일 경우 } $write_comments = '<span class="singlecomments"><a href="'.get_comments_link().'" class="count comment">'.$comments.'</a></span>'; echo $write_comments; ?> 2,single.phpについて、記事と記事の間にRSS+広告を設置するコードを実装している途中なのですが、RSSを挟むことに苦戦しています。 以前は記事の中身を仮においていたのですが、中身は記事ごとに違いますので、記事を出力するコードを組む必要があります。 ダッシュボードから記事の中身を書いたうえで、それを取得してRSSと広告を間に挟む必要があります。 記事の前半と後半を分けて取得したい場合何かいい方法はないでしょうか? 参考サイトの方法で広告を挟むことはできるのですがRSSの2番目をfunctions.phpに認識させる必要があります。 <!-- RSS2 --> <?php echo $trisect_rss_feed[1];?> ※参考サイト https://mbdb.jp/wordpress/customize/entry-divide-output.html 3,single.phpについて、記事の前半にタイトル、日付け、カテゴリー、コメント数を表示させたいのですがコードに問題はありますでしょうか? <!-- 記事コンテンツ --> <!--タイトルない場合は非表示 <?php the_title( '<h2 class="postpage-title">', '</h2>',false); ?> <!--日付け --> <span class="fa-clock"></span> <?php the_time('Y/m/d'); ?> <!--カテゴリー ない場合は非表示 --> <?php global $post; $categories = get_the_category( $post->ID ); ?> <span class="<?php echo $cat->category_nicename; ?>"><?php the_category(' '); ?> <span class="fa-folder"></span> </span> <!--コメント数 ない場合は0表示 --> <span class="single-comments"><a href="#comments"><span class="fa fa-comments-o"></span><?php comments_number( '0', '1', '%' ); ?> </a></span> ※該当ファイル https://wandbox.org/permlink/3GaPV04ay78hVFxb

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.9

【RSS その39】 ・RSSを3分割にする処理の中身はどのようなものになるのでしょうか? 関数get_trisect_rss_feed()は不要だったかも知れないですね。 ほとんどfront-page.phpのままでいいと思います。 $contentAなどを直接echoしているのを、$trisect_rss_feedにためていく方法です。 ---- $trisect_rss_feed = array(); for ($i = 0; $i < $block_per_page; ++$i) { $contentA = ''; $contentB = ''; $contentC = ''; for ($j = 0; $j < $rss_per_block; ++$j) { $item_index = $i * $rss_per_block + $j; if ($item_index >= count($rss_items)) { break; } $item = $rss_items[$item_index]; $title = "<strong><a href=\"{$item->link}\">{$item->title}</a></strong>"; if (empty($item->img)) { $img = 'wp-content/uploads/2021/12/EXt1cESWAAAwdOY.jpg'; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; $subject = "<a href=\"{$item->link}\">{$item->subject}</a>"; if ($j < $limitSect1) { $contentA .= "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } elseif ($j < $limitSect1 + $limitSect2) { $contentB .= "<li class=\"sitelink2\"><figure class=\"snip\"><figcaption>{$image}<br>{$title}<p class=\"btn\">{$subject}</p></figcaption></figure></li>"; // 画像と画像の下にタイトル } else { $contentC .= "<li class=\"sitelink3\">{$image}{$title}</li>"; // 画像と画像の右にタイトル } } $content = '<div class="rssBlock">'; $content .= "<ul class=\"wiget-rss\">{$contentA}</ul>"; $content .= "<ul class=\"wiget-rss\">{$contentB}</ul>"; $content .= "<ul class=\"wiget-rss\">{$contentC}</ul>"; $content .= '</div>'; $trisect_rss_feed[] = $content; } ---- あとは表示したいところにそれぞれのechoを入れてください。 echo $trisect_rss_feed[0]; echo $trisect_rss_feed[1]; echo $trisect_rss_feed[2];

php_learn
質問者

補足

回答ありがとうございます。 順番に出力していきたいのですが、echoとhtml文で統一する必要があります。 どちらに合わせるのが適切でしょうか? htmlに合わせる場合、下記のように1つ1つphpでくくるのが適切でしょうか? <?php echo $trisect_rss_feed[0];?> <?php echo $trisect_rss_feed[1];?> <?php echo $trisect_rss_feed[2];?> ※該当コード(single.php) //ここから追加 $rss_table_name = get_rss_table_name(4);//テーブル接続 var_dump($rss_table_name); $block_per_page = 3; /* ページ当たりブロック数 */ $limitSect1 = 5; /* ひとつ目のRSS件数 */ $limitSect2 = 4; /* ふたつ目のRSS件数 */ $limitSect3 = 4; /* みっつ目のRSS件数 */ $rss_per_block = $limitSect1 + $limitSect2 + $limitSect3; /* ブロックあたりRSS件数 */ $rss_per_page = $block_per_page * $rss_per_block; /* ページ当たりRSS件数 */ $rss_offset = 0; $sql = "SELECT * FROM {$rss_table_name} ORDER BY date DESC LIMIT %d,%d"; $query = $wpdb->prepare($sql, $rss_offset, $rss_per_page); $rss_items = $wpdb->get_results($query); $trisect_rss_feed = array(); for ($i = 0; $i < $block_per_page; ++$i) { $contentA = ''; $contentB = ''; $contentC = ''; for ($j = 0; $j < $rss_per_block; ++$j) { $item_index = $i * $rss_per_block + $j; if ($item_index >= count($rss_items)) { break; } $item = $rss_items[$item_index]; $title = "<strong><a href=\"{$item->link}\">{$item->title}</a></strong>"; if (empty($item->img)) { $img = ''; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; $subject = "<a href=\"{$item->link}\">{$item->subject}</a>"; if ($j < $limitSect1) { $contentA .= "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } elseif ($j < $limitSect1 + $limitSect2) { $contentB .= "<li class=\"sitelink2\"><figure class=\"snip\"><figcaption>{$image}<br>{$title}<p class=\"btn\">{$subject}</p></figcaption></figure></li>"; // 画像と画像の下にタイトル } else { $contentC .= "<li class=\"sitelink3\">{$image}{$title}</li>"; // 画像と画像の右にタイトル } } $content = '<div class="rssBlock">'; $content .= "<ul class=\"wiget-rss\">{$contentA}</ul>"; $content .= "<ul class=\"wiget-rss\">{$contentB}</ul>"; $content .= "<ul class=\"wiget-rss\">{$contentC}</ul>"; $content .= '</div>'; $trisect_rss_feed[] = $content; } <!-- RSS1 --> echo $trisect_rss_feed[0]; <!-- 広告 --> <script src=""></script> <!-- 記事コンテンツ --> <?php the_title( '<h2 class="postpage-title">', '</h2>',false); ?> <?php the_time('Y/m/d'); ?> <?php $cat = get_the_category(); $cat = $cat[0]; ?> <p class="<?php echo $cat->category_nicename; ?>"><?php the_category(' '); ?></p>] <span class="single-comments"><a href="#comments"><i class="fa fa-comments-o"></i><?php comments_number( '0', '1', '%' ); ?> </a></span> <!-- 記事前半 --> <div class="t_h t_i" >7: <span style="color: green; font-weight: bold;">テスト1</span> <span style="color: gray;"> 2022/06/25(土) 20:29:32.61 ID:7Wu8zs2o</span></div> <div class="t_b t_i" style="font-weight:bold;font-size:18px;line-height:27px;color:#db7093;"> <span style="color:mediumblue;" class="anchor"></span>テスト2 <br /> テスト3 </div><br /> <div class="t_h t_i" >20: <span style="color: green; font-weight: bold;">テスト4</span> <span style="color: gray;"> 2022/06/25(土) 20:31:59.44 ID:x3DyAWsk</span></div> <div class="t_b t_i" style="font-weight:bold;font-size:18px;line-height:27px;color:#800080;"> <span style="color:mediumblue;" class="anchor">テスト5</span> <br /> テスト6 </div><br /> <!-- RSS2 --> echo $trisect_rss_feed[1]; <!-- 広告 --> <a href="" rel="nofollow"> <img src="" border="0"></a> <img border="0" width="1" height="1" src="" alt=""> <!-- 記事後半 --> <div class="t_b t_i" style="font-weight:bold;font-size:18px;line-height:27px;color:#800080;"> <span style="color:mediumblue;" class="anchor">テスト5</span> <br /> テスト6 </div><br /> <div class="t_h t_i" >26: <span style="color: green; font-weight: bold;">テスト7</span> <span style="color: gray;"> 2022/06/25(土) 20:33:18.62 ID:tH7liN79</span></div> <!-- RSS3 --> echo $trisect_rss_feed[2];

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.8

【RSS その38】 ・投稿ページはページナビが必要ないですが、RSSをページ内で途中で切るにはfor文が必要になるため、RSSの数を計算する必要があります。 ページ当たりブロック数は3でいいと思います。 ひとつ目、ふたつ目、みっつ目のRSS件数は任意に設定してください。 あとはfront-page.phpと同じです。 ---- $block_per_page = 3; /* ページ当たりブロック数 */ $limitSect1 = 5; /* ひとつ目のRSS件数 */ $limitSect2 = 4; /* ふたつ目のRSS件数 */ $limitSect3 = 4; /* みっつ目のRSS件数 */ $rss_per_block = $limitSect1 + $limitSect2 + $limitSect3; /* ブロックあたりRSS件数 */ $rss_per_page = $block_per_page * $rss_per_block; /* ページ当たりRSS件数 */ $rss_offset = 0; $sql = "SELECT * FROM {$rss_table_name} ORDER BY date DESC LIMIT %d,%d"; $query = $wpdb->prepare($sql, $rss_offset, $rss_per_page); $rss_items = $wpdb->get_results($query); ----

php_learn
質問者

補足

アドバイスありがとうございます。 ページナビが必要ないということは、RSSを3分割にする処理の中身はどのようなものになるのでしょうか? $template_number(4)のRSSを扱うように=でつなげました。 ---- function get_trisect_rss_feed() { $trisect_rss_feed = $template_number(4);//処理 } ---- $trisect_rss_feed = get_trisect_rss_feed(); ---- echo $trisect_rss_feed[0]; echo $trisect_rss_feed[1]; echo $trisect_rss_feed[2];

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.7

【RSS その37】 ・$trisect_rss_feed=trisect_rss_feedとするのは可能でしょうか? 元々$rss1,$rss2,$rss3をまとめる用途に使う予定でしたので、=でつなぐものがありません。 可能です。 ですが、関数名と変数名が同じと言うのはよくないです。 関数名にはその機能を示す動詞を付けた方がいいと思います。 動詞と言うのは取得するgetとか作成するcreateとかです。 関数ですので、定義するところにも、使用するところにもカッコが付きます。 ---- function get_trisect_rss_feed() { 処理 } ---- $trisect_rss_feed = get_trisect_rss_feed(); ---- 以前の回答で、わかりやすくするために$rss1、$rss2、$rss3と書きましたが、$trisect_rss_feedで構いません。 get_trisect_rss_feed()の戻り値を配列にしておきます。 受け取った$trisect_rss_feedは配列になります。 表示するときはインデックスを指定します。 echo $trisect_rss_feed[0]; echo $trisect_rss_feed[1]; echo $trisect_rss_feed[2];

php_learn
質問者

補足

【RSS その37】 可能です。 ですが、関数名と変数名が同じと言うのはよくないです。 関数名にはその機能を示す動詞を付けた方がいいと思います。 動詞と言うのは取得するgetとか作成するcreateとかです。 関数ですので、定義するところにも、使用するところにもカッコが付きます。 ---- function get_trisect_rss_feed() { 処理 } ---- $trisect_rss_feed = get_trisect_rss_feed(); ---- 以前の回答で、わかりやすくするために$rss1、$rss2、$rss3と書きましたが、$trisect_rss_feedで構いません。 get_trisect_rss_feed()の戻り値を配列にしておきます。 受け取った$trisect_rss_feedは配列になります。 表示するときはインデックスを指定します。 echo $trisect_rss_feed[0]; echo $trisect_rss_feed[1]; echo $trisect_rss_feed[2]; A.説明ありがとうございます。自分なりにfunctionsを使い考えてみたのですが、$block_per_page でRSSの数を把握したい場合$rss1 , $rss2 , $rss3のほうがいいのではないかと考えました。RSSを読み込む際にrss1,2,3の数×(文字のみ,文字の横に画像,文字の下に画像)の1ページ分のRSSとしてカウントします。 投稿ページはページナビが必要ないですが、RSSをページ内で途中で切るにはfor文が必要になるため、RSSの数を計算する必要があります。下記のようにする方法を考えました。アドバイスお願い致します。 //rssを3つにためる $rss1=$contentA = ''; $contentB = '';$contentC = ''; $rss2=$contentA = ''; $contentB = '';$contentC = ''; $rss3=$contentA = ''; $contentB = '';$contentC = ''; //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block;//$rss1、$rss2、$rss3 × $limitSect1 + $limitSect2 + $limitSect3 function get_trisect_rss_feed() { $trisect_rss_feed = $template_number(4);//処理 $block_per_page = $trisect_rss_feed($rss1 , $rss2 ,$rss3);//数を把握 } ※front-page.phpから引用 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h3>RSS</h3>'; $contentA = ''; $contentB = ''; $contentC = ''; for ($j = 0; $j < $rss_per_block; ++$j) { $item_index = $i * $rss_per_block + $j; if ($item_index >= count($rss_items)) { break; }

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.6

【RSS その36】 ・$trisect_rss_feed = $template_number(4); こちらの関数は自作しているのですが、関数を作成するときは自分で命名することはできないのでしょうか? 自分で命名できます。 関数名はなんでしょうか。 それをどこに定義していますか。

php_learn
質問者

補足

【RSS その36】 ・$trisect_rss_feed = $template_number(4); こちらの関数は自作しているのですが、関数を作成するときは自分で命名することはできないのでしょうか? 自分で命名できます。 関数名はなんでしょうか。 それをどこに定義していますか。 A.申し訳ありません。定義しておりませんでした。 $trisect_rss_feed=trisect_rss_feedとするのは可能でしょうか? 元々$rss1,$rss2,$rss3をまとめる用途に使う予定でしたので、=でつなぐものがありません。

すると、全ての回答が全文表示されます。
  • dell_OK
  • ベストアンサー率13% (777/5756)
回答No.5

【RSS その35】 ・$trisect_rss_feed = $template_number(4)について その行の最後に ; がありません。 ・RSSを3等分する関数=$template_number(4)の中身を出力するコードを組んだのですが、$=$は構文的におかしいです。 おかしい理由はわかっていますか。 いただいたコードにはそのような関数は見当たりません。

php_learn
質問者

補足

$trisect_rss_feed = $template_number(4); こちらの関数は自作しているのですが、関数を作成するときは自分で命名することはできないのでしょうか? こちらの$rss1,$rss2,$rss3をまとめる際に()が必要でしたので、$trisect_rss_feedを作成いたしました。 $block_per_page = $trisect_rss_feed($rss1 , $rss2 , $rss3); //RSSを取得して、$rss1、$rss2、$rss3のみっつに分けてためる

すると、全ての回答が全文表示されます。

関連するQ&A