• ベストアンサー
※ 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% (776/5751)
回答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% (776/5751)
回答No.24

【cron その7】 ・cronの負荷を確認したいのですが、下記のコードで調べることは可能でしょうか? それが負荷かと聞かれたら微妙ですが、どれくらい時間がかかっているかはわかると思います。 ただ、このような調査では桁を丸めなくてもいいと思います。 1分間隔で実行するのはよくないと思います。 1分以内に処理が終了しなかったらどうなるかわかりません。 以前は大丈夫だったかもしれませんが、それはテーブルがひとつのときだったのではないでしょうか。 今はテーブルがよっつですから、単純に四倍の時間がかかります。 現在は各テーブルのRSSサイトはみっつですが、これが増えるとさらに時間がかかります。 カラフルボックス側で、高負荷のユーザーに制限をかけているかも知れませんので、そのような通知が届いていないか確認してください。 通知なしで制限されているかも知れません。 利用規約になにか書かれているかも知れませんのでそちらも確認してください。 そもそもそんなに最新のRSSを取得したい理由がわかりません。 各RSSサイトの一日当たりの件数は多くて10件です。 RSSサイトにアクセスして新着記事がある確率は10件/24時間です。 1件/2.4時間になります。 そうすると取得サイクルは二時間に一回でも十分なほどです。 分にすると、1件/144分です。 144分に1件の確率に対して、1分間隔で実行すると、143回ははずれということです。 これほど無駄なことをしてまで最新を取得する必要があるのでしょうか。 今度は逆に考えてみます。 もし仮に1分間隔で新着があるRSSサイトがあったとします。 1分間隔で取得する意味が出てきます。 そうすると今度はデータ量が膨大になるので早めに捨てる必要がでてきます。 300件程度あれば十分というお話しだったと思うので、3サイトだとすると1時間後にはいらないデータと言うことになります。 1時間でいらなくなるデータにどれほどの意味があるかということになります。 ある人が見た時にあった情報が、1時間後に別の人が見た時にはなくなっていた、としたら、情報の共有性が欠如してきます。 1分間隔で新着とは、あまりにも大げさにしてしまいましたが、このバランスを考えることで、適切な間隔がわかってくるような気がします。 30分前にはなかった情報が、今は配信されているかも知れない、ということはおおいにあります。 1分前でもそれは同じことですが、もしそれが30分でも1時間でもしばらくの間取得しなかったとして、それが問題になるようなことでしょうか。 RSSの仕組みは私にはわかりませんが、新着だけを配信してくれる機能があれば、短い間隔で取得しても問題はないのかも知れません。 もしかしたら日時を指定することができるのかも知れませんが、そのような情報はないのでしょうか。 ・cronの実行タイミングを30分ごとに調節してみて負荷が軽減される事はないと思うのですが、実行タイミングを遅らせても一度にかかる負荷は同じですよね… 一度にかかる負荷は同じですね。 ですが、分散させることはできます。 例えば、今は一回の実行で4テーブルを処理していますが、それを一回の実行では1テーブルしか処理しない方法です。 cronの設定をテーブルごとに設定します。 それぞれの設定には、コマンドライン引数を使ってどのテーブルを処理するか指定します。 パスは省略しますが、こんな記述です。 php storage_rss.php 1 後ろにスペースを空けて1とか2とかを書きます。 すると、変数$argvに配列として引数が渡されてきます。 $argv[0]は"storage_rss.php"が、 $argv[1]は"1"が入っています。 4テーブルの処理はひとつにして、$argv[1]を渡します。 ----変更前 storage_rss(1); storage_rss(2); storage_rss(3); storage_rss(4); ----変更後 storage_rss($argv[1]); ---- これで1テーブルについてしか処理しなくなります。 cronの設定は、以下のよっつになります。 php storage_rss.php 1 php storage_rss.php 2 php storage_rss.php 3 php storage_rss.php 4 同時に処理するとそれこそ負荷がかかりますので、開始時間を1分ほどずらして、等間隔に実行するようにしておけば、分散できると思います。

php_learn
質問者

補足

【cron その7】 ・cronの負荷を確認したいのですが、下記のコードで調べることは可能でしょうか? それが負荷かと聞かれたら微妙ですが、どれくらい時間がかかっているかはわかると思います。 ただ、このような調査では桁を丸めなくてもいいと思います。 A.1度エラー文が出ていないか確認してみます。 遅延が問題ならば遅れながらも取得できるはずですので、何かしらコード文でPHPバージョンエラーが起きているかもしれません。 カラフルボックス側で、高負荷のユーザーに制限をかけているかも知れませんので、そのような通知が届いていないか確認してください。 通知なしで制限されているかも知れません。 利用規約になにか書かれているかも知れませんのでそちらも確認してください。 A.cronでエラー文を取得してみます。 そもそもそんなに最新のRSSを取得したい理由がわかりません。 各RSSサイトの一日当たりの件数は多くて10件です。 RSSサイトにアクセスして新着記事がある確率は10件/24時間です。 1件/2.4時間になります。 そうすると取得サイクルは二時間に一回でも十分なほどです。 分にすると、1件/144分です。 144分に1件の確率に対して、1分間隔で実行すると、143回ははずれということです。 これほど無駄なことをしてまで最新を取得する必要があるのでしょうか。 A.もしtrisect_rss_feedからの取得を確認したい場合は、次のRSSがくるまで分からないということでしょうか? 現在のRSSはすぐに取得できるのでしょうか? RSSの仕組みは私にはわかりませんが、新着だけを配信してくれる機能があれば、短い間隔で取得しても問題はないのかも知れません。 もしかしたら日時を指定することができるのかも知れませんが、そのような情報はないのでしょうか。 A.RSSは大手アンテナサイトのクローラーでも最新の記事を巡回して取得して表示させる仕組みになっています。 URLからRSSを取得して記事が反映されていたらそれを取得して表示させます。 データベースを使わない方法もあるとアドバイスを頂いたこともありますが、今回は勉強のためにデータベースとcronを使う方法を選択しました。 ・cronの実行タイミングを30分ごとに調節してみて負荷が軽減される事はないと思うのですが、実行タイミングを遅らせても一度にかかる負荷は同じですよね… 一度にかかる負荷は同じですね。 ですが、分散させることはできます。 例えば、今は一回の実行で4テーブルを処理していますが、それを一回の実行では1テーブルしか処理しない方法です。 cronの設定をテーブルごとに設定します。 それぞれの設定には、コマンドライン引数を使ってどのテーブルを処理するか指定します。 パスは省略しますが、こんな記述です。 php storage_rss.php 1 後ろにスペースを空けて1とか2とかを書きます。 すると、変数$argvに配列として引数が渡されてきます。 $argv[0]は"storage_rss.php"が、 $argv[1]は"1"が入っています。 4テーブルの処理はひとつにして、$argv[1]を渡します。 ----変更前 storage_rss(1); storage_rss(2); storage_rss(3); storage_rss(4); ----変更後 storage_rss($argv[1]); ---- これで1テーブルについてしか処理しなくなります。 cronの設定は、以下のよっつになります。 php storage_rss.php 1 php storage_rss.php 2 php storage_rss.php 3 php storage_rss.php 4 同時に処理するとそれこそ負荷がかかりますので、開始時間を1分ほどずらして、等間隔に実行するようにしておけば、分散できると思います。 A.分散して負荷を軽減したいのですが、コマンドライン引数のパスとはcronのパスとは違うのでしょうか? /opt/cpanel/ea-php54/root/usr/bin/php /home/gtyaszhi/public_html/storage_rss.php

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

【投稿ページ その12】 ・下記コードはカテゴリーのクリック数を測るものだったのですが、 は削除しても問題ないのでしょうか? クリック数を測る、の意味がわかりませんが、削除して問題ありません。

php_learn
質問者

補足

カテゴリーのクリック数をカウントするcategory.phpの仕組みがわからないのですが、ファイルが切り替わった瞬間にカウントされるのか、下記のコードでコンテンツをカウントするのかどちらか理解できていません。 the_title(); the_content(); 以前まで下記のコードでsingle.phpをまとめていたのですが、1つにつなげておかないとカウントされないのではないかと考えておりました。 <?php if (is_single() && !is_user_logged_in() && !isBot()) { // 個別記事 かつ ログインしていない かつ 非ボット set_post_views_week(); // 週間アクセスをカウントする set_post_views_month(); // 月間アクセスをカウントする } the_title(); $content = get_the_content(); 省略 ?>

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

【投稿ページ その11】 ・single.phpをすべてechoでまとめる場合、広告部分はどうすればいいでしょうか?classを全体につけたい場合の出力方法が知りたいです。勉強のためにすべてechoで1まとめにして出力したいのでアドバイスよろしくお願い致します。 HTMLをそのまま'で括ったものをechoするだけです。 今回の広告に限って言うと、'で括るだけで大丈夫ですが、注意点があるので後で説明します。 ---- <?php echo '<script src="https://adm.shinobi.jp/s/ecf84559bdac801ad27c367fffbffe2f"></script>'; ?> ---- 全体的にPHPになるのでしたら、行ごとに<?php ?>を書くことはなくなります。 上下にある行ごとの<?php ?>は削除して、ひとつの<?php ?>の中にまとめてください。 例えばこうです。 ----変更前 <!-- 記事前半 --> <?php echo get_extended( $post->post_content )['main']; ?> <!-- RSS2 --> <?php echo $trisect_rss_feed[1];?> <!-- 広告 --> <script src="https://adm.shinobi.jp/s/ecf84559bdac801ad27c367fffbffe2f"></script> ----変更後 <?php /* 記事前半 */ echo get_extended( $post->post_content )['main']; /* RSS2 */ echo $trisect_rss_feed[1]; /* 広告 */ echo '<script src="https://adm.shinobi.jp/s/ecf84559bdac801ad27c367fffbffe2f"></script>'; ?> ---- 'で括ってechoにする注意点はHTMLに'が含まれていないことが前提になります。 HTMLの属性の値を指定する際の引用符には、"と'が使えます。 以下のふたつはどちらもまったく同じ動作をします。 <div class="abc"> <div class='abc'> どちらを使っても構わないことになっているため、どちらを使うかは作者の好みになっています。 どこかのサイトを参考にしてコピーしてきた際にはどちらを使われているか気を付けてみてください。 もしそれが'であった場合は"に置き換えてから、'で括ってechoしてください。 例えば参考サイトのものが以下のものだったとすると、手順はこうなります。 <div class='abc'> 1.'を"に置き換える。 <div class="abc"> 2.'で括る。 '<div class="abc">' 3.echoする。 echo '<div class="abc">'; もう一段階難しい話しがあって、HTMLに'と"の両方が使われている場合です。 例えばこんなものがあったりします、想像ですが。 <div onclick="alert('abc');"> HTMLの属性値はalert('abc');です。 これはJavaScriptで定義された関数alert()を実行するものです。 JavaScriptも引用符として'と"が使えます。 ここだけ見ればalert("abc");でもかまいません。 ですがHTMLと合わせてみるとそうはできません。 もし、こう書いたとします。 <div onclick="alert("abc");"> HTMLは"(開始の引用符)から次の"(開始と同じ引用符)までを属性値として判断します。 つまりその値は"alert("となり、それをJavaScriptして実行しようとすると不完全なためエラーになります。 なので、属性値のための引用符と、JavaScriptのための引用符を区別するために、それぞれが異なる引用符で書く必要があります。 そのような場合の書き方が先ほど書いたこれです。 <div onclick="alert('abc');"> 引用符を入れ替えて、こう書くこともできます。 <div onclick='alert("abc");'> 前置きが長くなりましたが、このような場合は'が含まれています。 これを単純に'で括ってechoにすることはできません。 仮にこう書いたとします。 echo '<div onclick="alert('abc');">'; PHPもHTMLと同じく、開始の引用符から、同じ引用符までをその値としてみなします。 つまり、 echo '<div onclick="alert(' ここまででechoの処理をしようとし、続きの、 abc');">'; を解釈できずにエラーになります。 この対策方法はいろいろあるとは思いますので、このような場合が出てきた時には調べてみてください。 それでと、classを広告全体につけたいとのことですが、以下のようにされればよろしいかと思います。 echo '<div class="">'; echo '<script src="https://adm.shinobi.jp/(省略)"></script>'; echo '<a href="//af.moshimo.com/(省略)'; echo '</div>';

php_learn
質問者

補足

【投稿ページ その11】 HTMLをそのまま'で括ったものをechoするだけです。 今回の広告に限って言うと、'で括るだけで大丈夫ですが、注意点があるので後で説明します。 'で括ってechoにする注意点はHTMLに'が含まれていないことが前提になります。 HTMLの属性の値を指定する際の引用符には、"と'が使えます。 以下のふたつはどちらもまったく同じ動作をします。 <div class="abc"> <div class='abc'> どちらを使っても構わないことになっているため、どちらを使うかは作者の好みになっています。 どこかのサイトを参考にしてコピーしてきた際にはどちらを使われているか気を付けてみてください。 もしそれが'であった場合は"に置き換えてから、'で括ってechoしてください。 A.理解できました。説明ありがとうございます。 例えば参考サイトのものが以下のものだったとすると、手順はこうなります。 <div class='abc'> 1.'を"に置き換える。 <div class="abc"> 2.'で括る。 '<div class="abc">' 3.echoする。 echo '<div class="abc">'; つまり、 echo '<div onclick="alert(' ここまででechoの処理をしようとし、続きの、 abc');">'; を解釈できずにエラーになります。 この対策方法はいろいろあるとは思いますので、このような場合が出てきた時には調べてみてください。 A.ありがとうございます。違いが分からなかったため助かりました。 それでと、classを広告全体につけたいとのことですが、以下のようにされればよろしいかと思います。 echo '<div class="">'; echo '<script src="https://adm.shinobi.jp/(省略)"></script>'; echo '<a href="//af.moshimo.com/(省略)'; echo '</div>'; A.echo'<a href="//af.moshimo.com/">'でいいでしょうか?

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

【投稿ページ その10】 ・記事が重複表示されるため変更が必要なようです。 先頭にある以下の部分は削除してください。 ---- the_title(); the_content(); ---- これより下にも、タイトルや分割した記事を表示する処理があります。 それで、重複表示されている、と思われているのではないでしょうか。

php_learn
質問者

補足

回答ありがとうございます 下記コードはカテゴリーのクリック数を測るものだったのですが、 the_title(); the_content(); は削除しても問題ないのでしょうか? <?php if (is_single() && !is_user_logged_in() && !isBot()) { // 個別記事 かつ ログインしていない かつ 非ボット set_post_views_week(); // 週間アクセスをカウントする set_post_views_month(); // 月間アクセスをカウントする } the_title(); the_content();

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

【RSS その41】 ・RSSがどうしても取得されないので確認してみたところstring(16) "trisect_rss_feed"と表示されております。 string(16)は、この文字列が16バイトです、と言う意味です。 データの件数ではありません。 テーブル名が変わったか、私が勘違いしてpage_rss_feedだと思っていたのですね。 テーブルを作り直したのでしたら、まだデータが入っていないだけではないでしょうか。 もう一度storage_rss.phpを実行してみてください。

php_learn
質問者

お礼

cronの負荷を確認したいのですが、下記のコードで調べることは可能でしょうか? cronの実行タイミングを30分ごとに調節してみて負荷が軽減される事はないと思うのですが、実行タイミングを遅らせても一度にかかる負荷は同じですよね… <?php $time_count_start = microtime(true); //ここから処理書く sleep(3); //ここまで $time_count_end = round( microtime(true) - $time_count_start, 4); echo "{$time_count_end} 秒"; ?>

php_learn
質問者

補足

回答ありがとうございます。 cronの実行で不可解なことがありまして、以前は1分ごとに実行していたらその都度メールが届いていたのですが、昨日実行すると途切れ途切れになっていて昨日の0時5分からは通知がまた途絶えております。 これの意味がよく理解できないのですが、もしかすると負荷に耐えきれていない可能性があります。

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

【投稿ページ その9】 get_the_divided_content()の方は、正規表現による分割がうまくできていないようでした。 新しい方法では前半後半が分割されるようになりました。 ・RSSについても懸念点があり2番目しか機能していないようです。 理由は分かりませんが、真ん中のRSS+広告のみ出力されております… 私の方ではRSSも問題なく表示されています。

php_learn
質問者

お礼

1点だけお聞きしたいのですが、single.phpをすべてechoでまとめる場合、広告部分はどうすればいいでしょうか?classを全体につけたい場合の出力方法が知りたいです。勉強のためにすべてechoで1まとめにして出力したいのでアドバイスよろしくお願い致します。 <!-- 広告 --> <script src="https://adm.shinobi.jp/s/ecf84559bdac801ad27c367fffbffe2f"></script> <!-- 広告 --> <!-- 広告 --> <a href="//af.moshimo.com/af/c/click?a_id=3493027&p_id=2312&pc_id=4967&pl_id=38392&guid=ON" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img src="//image.moshimo.com/af-img/1762/000000038392.png" width="200" height="200" style="border:none;"></a><img src="//i.moshimo.com/af/i/impression?a_id=3493027&p_id=2312&pc_id=4967&pl_id=38392" width="1" height="1" style="border:none;"> <!-- 広告 -->

php_learn
質問者

補足

回答ありがとうございます。コードを確認したところfunctions.phpにスペルミスがあったので修正致しました。 下記コードのthe_content();を別のコードに書き換える必要があるのですが、$content = get_the_content();で代用可能でしょうか? 記事が重複表示されるため変更が必要なようです。 <?php if (is_single() && !is_user_logged_in() && !isBot()) { // 個別記事 かつ ログインしていない かつ 非ボット set_post_views_week(); // 週間アクセスをカウントする set_post_views_month(); // 月間アクセスをカウントする } the_title(); the_content(); ※参考サイト https://atelierroi.com/tecnicalnote/wpdesign/contentsplit/ https://www.4web8.com/2236.html ※該当ファイル https://wandbox.org/permlink/u4nNrCIJbayeBgOn

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

【ヘッダー その3】 ・a helfにclassが直接ついているように見えましたので、違和感を感じました。 aタグにclassを書くことはできます。 おそらくすべてのタグにclassは書けると思います。

php_learn
質問者

お礼

こちらが最新の質問になります。RSSがどうしても取得されないので確認してみたところstring(16) "trisect_rss_feed"と表示されております。 他の画像1タイトル1,画像2タイトル1,画像3タイトル1はすべてstring(15)となっており疑問です。 URLはすべて同じため16件取得されていることが不思議なのですが、何が原因だと考えられますでしょうか? データベースはtrisect_rss_feedで登録しております。 ※該当コード https://wandbox.org/permlink/4f3ydnei4LbfI113

php_learn
質問者

補足

ありがとうございます。勉強になりました。

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

【投稿ページ その8】 ・タイトルを忘れているときは非表示にしたい場合でもtrueなのでしょうか? falseだと表示したいときも表示できません。 falseとtrueの違いは、the_title()内でechoしてもらわないかしてもらうかです。 タイトルがない場合は、引数にしている<h2>タグも出力されないのでtrueで問題ありません。

php_learn
質問者

お礼

記事が重複表示される原因が特定できたのですが、the_content();のコードが原因のようです。 こちらのコードを消して、<!--more-->に対するコードを組む必要があります。 どうまとめればいいでしょうか? 途中でphpが切れてしまっているため、あとで1つのphpにまとめる予定です。 1つ先に聞いておきたいのですが、広告のhtmlやscriptをechoさせる場合どのように囲う必要があるのでしょうか? <?php if (is_single() && !is_user_logged_in() && !isBot()) { // 個別記事 かつ ログインしていない かつ 非ボット set_post_views_week(); // 週間アクセスをカウントする set_post_views_month(); // 月間アクセスをカウントする } the_title(); the_content(); ※参考サイト https://atelierroi.com/tecnicalnote/wpdesign/contentsplit/ ※該当ファイル https://wandbox.org/permlink/GVENhEqbxcYEdh1H

php_learn
質問者

補足

ありがとうございます。勉強になりました。

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

【投稿ページ その7】 ・RSSがなかなか格納されず待機しているのですが、RSSの格納タイミングはRSS元の記事が更新されて新たなRSSが反映されたときでしょうか? もしかしたらテーブル名が取得できていないのではないでしょうか。 エラーになっていないのが不思議ですが、もしそうであれば、functions.phpにも以下を追加してください。 ---- } elseif (4 == $template_number) { $rss_table_name = 'page_rss_feed'; ----

php_learn
質問者

お礼

こちらが最新の回答になります。 RSSについても懸念点があり2番目しか機能していないようです。 理由は分かりませんが、真ん中のRSS+広告のみ出力されております… https://imgur.com/CVWAoF0.jpg https://imgur.com/W5nvNCM.jpg $rss1の出力 バナー広告 記事前編 $rss2の出力 バナー広告 記事続編 $rss3の出力 コメント 前後の記事リンク

php_learn
質問者

補足

functions.phpの記述が抜けておりました。申し訳ありません。

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

【ヘッダー その2】 ・classのつけ方に違和感があるのですが、問題ないのでしょうか? classの前にあるたくさんの空白のことでしたら、ひとつの空白でいいと思います。

php_learn
質問者

補足

a helfに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; ?>

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

関連するQ&A