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

WordPressの記事表示に問題が発生しています

このQ&Aのポイント
  • WordPressの質問(q10032703)に関連して、記事が表示されない問題が発生しています。
  • set_template_info関数は、テンプレート情報を設定するためのものです。
  • get_template_number関数は、テンプレート番号を取得するためのものです。

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

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (743/5656)
回答No.82

基本的に同じコードですのでもとのsearch.phpに戻して、 実行してみてください。 と言いましたが、問題が発生していることを確認してください。 削除したものが表示されるのと、タイトルも何も表示されないことです。

php_learn
質問者

お礼

SQLに関して勘違いがありました。申し訳ありません。 meta.meta_key = ''を変更して検索したところテーブルのデータは記事データと合致しておりました。 SELECT distinct post.* FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_title LIKE '%イ%') ORDER BY post.post_date DESC

php_learn
質問者

補足

削除したものが表示されるのと、タイトルも何も表示されないことです。 A.回答ありがとうございます。削除したものは表示されておらず、タイトルも表示されています。 1つ気付いたことがあるのですが、get_search_query():で出力できなかったタイトルがfilter_input():で出力できています。 何かしらの法則があるようです。 例えばイで検索した際にえいてぃーんカという記事があったと仮定します。 get_search_query():の方では該当記事として出力できていませんが、filter_input():では出力できています。 いくつかこのような記事があり、SQLで検索に使用したコードでもイが含まれるのに出力されない記事があります。 get_search_query():の検索の精度は低い気がしています。 タイトルから表示されていない状態ですが、先にページナビの修正から行うのでしょうか? ※現在表示されている記事 https://imgur.com/IupD3AB.jpg ※現在のコード https://wandbox.org/permlink/VReuDuARbgCZ1OJM ※確認の際に使用したコード SELECT distinct post.* FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_title LIKE '%イ%') ORDER BY post.post_date DESC

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

その他の回答 (81)

  • dell_OK
  • ベストアンサー率13% (743/5656)
回答No.21

【カテゴリー その38】 ・カテゴリーランキングの更新が行われないことです。 以前functions.phpにあった、category_views_week()がなくなっています。 category.phpからこの関数を呼ぶ処理もなくなっています。 以前のコードをお持ちであればそれを持ってきて、記事ランキングのように修正して組み込んでみてください。 リセットの処理もreset_category_week.phpとかで作成する必要がありますね。

php_learn
質問者

補足

回答ありがとうございます。 確認してみたところ下記のコードを発見しました。 ランキングと同じようにcronでまとめることは可能でしょうか? https://wandbox.org/permlink/KGolKaDwzsmQYnqw

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

【検索 その6】 ・search.phpのみ$argsがないのはテーブルにmeta_keyを設定できないからだったでしょうか? 検索で$argsが不要なのは、以下のようなコードでSQL文でデータを取得しているからです。 ---- $sql = "~"; $query = $wpdb->prepare(~); $post_items = $wpdb->get_results($query); ---- $argsはget_posts()などのためのもので、これでは複雑な条件が指定できないため、SQL文で取得するようにしています。

php_learn
質問者

お礼

archive.phpも同じように修正してみたのですが、元々カテゴリーは複数出力できないというお話だったような記憶もあります。 カスタムフィールドの識別のために$tkを追加しましたが何も表示されなくなりました… また明日再度考えてみます… $query = $wpdb->prepare($sql, $tk, $cat, $posts_offset, $posts_per_page); https://wandbox.org/permlink/AP3HVvEw0PCbqz7V

php_learn
質問者

補足

解説ありがとうございます。結果の上書きが行われるため削除したということでしょうか。 $argsに設定できない条件をSQLのテーブル結合で補ったのを思い出しました。ありがとうございます。 先ほどファイルの確認が終わりました。 3点ほど修正が必要なのですが、 1点目はタイトルを設置しない予定の記事に自動でタイトルが挿入されるので、データベースに格納される前(functions.php)で制御しなければなりません。 2点目はカテゴリーランキングの更新が行われないことです。記事のカテゴリーをクリック後も反映されず人気キーワードのラインナップが増えません。 3点目は画像2、画像3の場合のカテゴリー記事が紐付いて表示されないことです。 タイトルの自動挿入の対策として、テラテイルの過去の質問から下記のコードを見つけたのですが、エラーが表示されておりファイルの更新ができませんでした。 $dateの構文エラーのようですが、こちらは前述に何かコードが必要なのでしょうか? ※該当コード apply_filters( 'wp_insert_post_data', array $data, array $postarr, array $unsanitized_postarr, bool $update ) ※エラー文 syntax error, unexpected '$data' (T_VARIABLE), expecting '(' ※参考サイト https://developer.wordpress.org/reference/hooks/wp_insert_post_data/ ※例文 function remove_page_title_prefix( $title = '' ) { if ( empty( $title )) return $title; $search[0] = '/^' . str_replace('%s', '(.*)', preg_quote(__('Protected: %s'), '/' )) . '$/'; $search[1] = '/^' . str_replace('%s', '(.*)', preg_quote(__('Private: %s'), '/' )) . '$/'; return preg_replace( $search, '$1', $title ); } add_filter( 'the_title', 'remove_page_title_prefix' ); 2点目の原因はよくわからないのですが、もう少しコードを検索してみて意味を紐解きながら原因を探ってみます。 3点目は検索ページのように前後の処理が必要なようなので追加してみます。 不思議なことが2つほどありまして、 画像1は過去のアクセスデータが2カテゴリー分残っているようで、 画像2と画像3のpage-secound.phpとpage-third.phpを見るとアクセスランキングがカウントされておりません。 動作を確かめるために画像2、画像3のカテゴリーをクリックすると、何故か画像1で表示されているカテゴリーが呼び出されます。 ※作成中のサイト http://www.last.cfbx.jp/

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

・page-common.phpの方も気になるのですが、そちらは該当するのでしょうか? cronで実行しているPHPのバージョンあるいは設定と、ブラウザからアクセスした際に実行しているPHPのバージョンあるいは設定が違っているのか、ブラウザからのアクセスについては他のところでarray()ではなく[]を使っていて動作しているようなので大丈夫だと思います。 ・条件が上書きされているということですね。 条件ではなくて、検索結果($post_items)が上書きされているということです。

php_learn
質問者

補足

アドバイスありがとうございます。 なるほどcronとブラウザの違いですね。覚えておきます。 2~3か月前に$argsでエラーが出力された記憶があるので、今回はエラーが起きていないことがやや疑問でした。 $wpdb->get_results($query);なので結果ですね失礼いたしました。

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

【アーカイブ その20】 アーカイブが表示されないことについては、以下のように変更してください。 'meta_key'の設定誤りです。 archive.php ----変更前 $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, 'meta_key' => '$tn', 'year' => $y, 'monthnum' => $m, ]; ----変更後 $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, 'meta_key' => $tk, 'year' => $y, 'monthnum' => $m, ]; ----

php_learn
質問者

補足

【アーカイブ その20】 A.keyを渡すので$tkの方でした。訂正ありがとうございます。 1つだけ確認しておきたいのですが、search.phpのみ$argsがないのはテーブルにmeta_keyを設定できないからだったでしょうか? 忘れてしまっていたら申し訳ないです。 meta_keyが設定できずSQLテーブルを結合したので$argsを削除したのではないかと思いました。 すべてのファイルがまとめられましたので、今からタイトルをばらばらにして検索が機能通りに動くか確認します。 アーカイブも日付けを意図的にずらして確認してみます。カテゴリーも同じものを設定しておりましたので、変更してみます。

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

【検索 その5】 検索結果を破壊していると言うのは、①でSQLを使って取得した結果が$post_itemsに入っているのに、②でget_posts()を使って$post_itemsを上書きしていると言うことです。 ---- $post_items = $wpdb->get_results($query);① $args = [ 'offset' => $posts_offset, 'posts_per_page' => $posts_per_page, 'meta_key' => '$tn',/*カスタムフィールドのフィールド名*/ ];$post_items = get_posts($args);② ---- 削除をお願いした部分はfront-page.phpからコピーしてきたと思われる無条件抽出です。

php_learn
質問者

補足

解説ありがとうございます。 条件が上書きされているということですね。理解できました。

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

【アクセスランキング その12】 ランキングリセットを試してみたのですが、カウントを0に更新する方法では、アクセス0回(0 Views)としてランキング表示されてしまっていました。 「アクセスランキングはまだ集計されていません。」の表示処理が準備されているので、本来ならこれが表示された方がいいような気がします。 もしこちらにするのでしたら、リセットの処理を0に更新するのではなく、post_metaを削除する方法にしてください。 reset-common.php ----変更前 update_post_meta($reset_post->ID, $key, 0); ----変更後 delete_post_meta($reset_post->ID, $key); ----

php_learn
質問者

補足

【アクセスランキング その12】 A.修正ありがとうございます。カウントアップは既存のものから引き継がれていたため、確認が取れていませんでした。申し訳ありません。 処理を修正致しました。 ※ファイル一覧 https://wandbox.org/permlink/8kD1Yv0swBpLpjkr

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

【RSS その47】 ・1度テーブルを削除してみましたが、同じURLから収集しているようです。 cronで実行しているファイルはこれだと思いますが、 /home/zblgibzx/public_html/storage_rss.php URLを変更されたファイルはこちらだったりしませんか。 /home/zblgibzx/public_html/wp-content/themes/sample_theme/storage_rss.php

php_learn
質問者

補足

アドバイスありがとうございます。 dell_okさんのおっしゃる通りでした。 修正してみたところ別々のURLから取得できました。

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

【アクセスランキング その11】 リセット処理ですが、以前cronからの実行で配列定義の[]が使えなかったかと思います。 私のコードのままだとエラーになっているかも知れないため、実行して確認できればいいのですが、あらかじめreset-common.phpを直しておいた方がいいかも知れません。 ----変更前 $args = [ 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_key' => $key, ]; ----変更後 $args = array( 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_key' => $key, ); ----

php_learn
質問者

補足

修正ありがとうございます。すっかり忘れておりましたが、過去に配列定義でエラーが出ていてすべて修正したのを思い出しました。 page-common.phpの方も気になるのですが、そちらは該当するのでしょうか? $args = [ 'offset' => $posts_offset, 'posts_per_page' => $posts_per_page, 'meta_key' => $tk,/*カスタムフィールドのフィールド名*/ ];$post_items = get_posts($args); //表示 display_rss_post_2();

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

カテゴリーについてですが、カテゴリーが表示されていないようです。 display.phpのdisplay_rss_post_1()とdisplay_rss_post_2()に以下のコードを追加してください。 ---- global $categories; ----

php_learn
質問者

補足

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

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

$tnが無効について。 まず、アーカイブ。 display_archive()に以下のコードを追加して、 ---- global $tn; ---- URLの生成を以下のようにしてください。 ---- $url = home_url("{$y}/{$m}?tn={$tn}"); ---- 検索の$tnは大丈夫そうですが、検索結果($post_items)を破壊しています。 以下の部分を削除してください。 ----search.php $args = [ 'offset' => $posts_offset, 'posts_per_page' => $posts_per_page, 'meta_key' => '$tn',/*カスタムフィールドのフィールド名*/ ];$post_items = get_posts($args); ----

php_learn
質問者

補足

修正ありがとうございます。アーカイブは$tnが抜けているのに今気が付きました。検索ページは表示されましたが、アーカイブは何も表示されていません。 search.phpが$argsで検索結果を破壊しているというのはSQLで検索しているからでしょうか?条件がぶつかって打ち消されていると解釈したのですが。 アーカイブが何も表示されていないのは検索ページと同様に打ち消されているのではないかと考えています。

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

関連するQ&A

  • wordpressで投稿記事を3パターン表示したい

    投稿記事を3ファイルに分けて表示したいのですが、うまくいかず全てpage.phpとして表示されます。振り分けることができないのですが、アドバイスよろしくお願いします。 前提として page.php page-secound.php page-third.phpの3ファイルがあり固定ページのテンプレートにしている。 <?php /* Template Name: 画像2タイトル1 Template Post Type: page */ ?> <?php /* Template Name: 画像3タイトル1 Template Post Type: page */ ?> 以下のカスタムフィールド名を各記事に割り振っております。 single_rss_feed1 duuble_rss_feed 2 triple_rss_feed 3 ※1つ目の方法 <!--index.phpの文頭に書くコード--!> <?php if(get_post_meta($post->ID,'single_rss_feed1',true) == 'A'): ?> <?php include(('main-first.php') == 'A'); ?> <?php elseif (get_post_meta($post->ID,'duuble_rss_feed2',true) == 'B'): ?> <?php include(('page-secound.php') == 'B'); ?> <?php elseif (get_post_meta($post->ID,'triple_rss_feed3',true) == 'C'): ?> <?php include(('page-third.php') == 'C'); ?> <?php else: ?> <?php endif; ?> _______________________________ ※2つ目の方法 <!--functions.phpに書くコード--!> function custom_template_include($template) { global $post; if (!is_page()) return $template; if (get_post_meta($post->ID, ' duuble_rss_feed 2')) $new_templete = locate_template(array('sub-secound.php')); if (get_post_meta($post->ID, ' triple_rss_feed 3')) $new_template = locate_template( array( 'sub-third.php' )); if (!empty($new_template)) return $new_template; return $new_template; }

    • ベストアンサー
    • PHP
  • WordPressの質問(q10113307)の続

    「保存するファイル名につかってはいけない」とのことなのですが、user_add_check.phpの<input type="hidden" name="image_name" value="<?= $user_image['name'] ?>">を使う事はアウトなようです。 自分なりに参考サイトを見て考えてみたのですが、$_SESSION['image']['data']が機能しているのか分からない状態です。 自信がないため2パターン考えてみました。 ※参考サイト https://qiita.com/ryouya3948/items/66294cb445663f2a9d95 user_add.php(要らないもの?) <h2>新規登録</h2> <form method="post" action="user_add_check.php" enctype="multipart/form-data"> <input type="text" name="name" class="user_name_input" placeholder="ユーザー名"> <input type="file" name="image" id="my_image" accept="image/*" multiple> <input class="btn btn-outline-info" type="button" onclick="history.back()" value="戻る"> <input class="btn btn-outline-dark" type="submit" value="登録"> </form> user_add_check.php(入力画面) <?php session_start(); //ファイルの内容を全て文字列に読み込む $_SESSION['userfile']['data'] = file_get_contents($_FILES['userfile']['tmp_name']); //アップロードされたファイルの種類を確認--送られてくる MIME タイプは信用できない--メッセージ全体を偽装できる $_SESSION['userfile']['type'] = exif_imagetype($_FILES['userfile']['tmp_name']); $_SESSION['userfile']['type'] = mime_content_type ($_FILES['userfile']['tmp_name'] ); //画像であるかどうかをexif_imagetype()を使って判別--画像のみ分ける必要があるのか不明 //$_SESSION['userfile']['type'] = exif_imagetype($_FILES['image']['tmp_name']); ?> <img src="image.php"> <form method="post" action="user_add_done.php"> <input type="hidden" name="name" value="<?= $user_name ?>"> <input type="hidden" name="image_name" value="<?= $user_image['name'] ?>"> <input type="button" class="btn btn-outline-info modal_close" onclick="history.back()" value="戻る"> <input type="submit" class="btn btn-outline-dark" value="OK"> </form> image.php(確認画面 バイナリーデータ確認) <?php $load_name = $ext session_start(); switch ($file_ext == $_SESSION['userfile']['type']) { case IMAGETYPE_JPEG: header('content-type: image/jpeg'); break; case IMAGETYPE_PNG: header('content-type: image/png'); break; case IMAGETYPE_GIF: header('content-type: image/gif'); break; case MIME_TYPE_PDF: header('content-type: application/pdf'); break; case MIME_TYPE_MP4: header('content-type: video/mp4'); break; } ?> <?php $load_name = $ext session_start(); switch ($file_ext == $_SESSION['userfile']['type']) { //jpegを表示 case IMAGETYPE_JPEG: header('content-type: image/jpeg'); echo $_SESSION['image']['data']; break; //pngを表示 case IMAGETYPE_PNG: header('content-type: image/png'); echo $_SESSION['image']['data']; break; //pdfを表示 case MIME_TYPE_PDF: header('content-type: application/pdf'); echo( substr( $_SESSION['image']['data'], 0, 5 ) ); break; //mp4を表示 case MIME_TYPE_MP4: header('content-type: video/mp4'); echo( substr( $_SESSION['image']['data'], 4, 4 ) ); break; } ?> ___________________________________________________________ image.php(確認画面 バイナリーデータ確認) <?php function get_file_ext($ext) { //MIMEタイプを取得 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_file($finfo, $_SESSION['image']['data']);/*$GET['image']['data']*/ if (FILE_EXT_PNG == $ext && 'image/png' == $mime_type) { } elseif (in_array($ext, [FILE_EXT_JPEG, '.jpg']) && 'image/jpeg' == $mime_type) { $ext = FILE_EXT_JPEG; } else { // バイナリー文字列確認 $contents = file_get_contents($_SESSION['image']['data']); if (FILE_EXT_PDF == $ext && 'application/pdf' == $mime_type && '%PDF-' == substr($contents, 0, 5)) { } elseif (FILE_EXT_MP4 == $ext && 'video/mp4' == $mime_type && 'ftyp' == substr($contents, 4, 4)) { } else { $ext = null; } } return $ext; } ?> user_add_done.php(表示画面 保存拡張子) $_SESSION['image']これを使う //文字列をファイルに書き込む関数 file_put_contents('./image/',$_SESSION['image']);

    • ベストアンサー
    • PHP
  • WordPressの質問(q10165331)の続

    URLを連番にすべきかuuidにすべきか迷っているのですが、どちらが良いと思われますでしょうか? 一連番号のIDを避けるべきなのであればメジャーなサイトはすべてランダム文字列になっているはずではないかという意見とURLが予測しやすいと攻撃しやすいという意見があるようです。 IDを付ける際にBase58を使う、N 進数の文字列を使うなどuuid意外にも色んな方法があるようで、どうすべきか分かりません、アドバイスお願い致します。 $url = home_url('質問表示画面?'.$row->ID); ※idをautoincrementしない方が良い理由 https://zenn.dev/praha/articles/3c84e3818891c3 ※ユーザIDを連番にしてURLに使っても問題ない https://teratail.com/questions/364664 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11270700181 ※短縮URLの付け方 https://sousaku-memo.net/php-system/71 https://co.bsnws.net/article/256 ※htmlspecialcharsでIDをエスケープ http://lovee7.blog.fc2.com/blog-entry-34.html 質問一覧表示(single-que_list.php) 回答可能なページ(single-complete.php) <?php /* Template Name: que_list 固定ページ: 質問一覧画面 */ get_header(); $sql = 'SELECT * FROM sortable'; $query = $wpdb->prepare($sql); $rows = $wpdb->get_results($query); $upload_dir = wp_upload_dir(); foreach ($rows as $row) { $url = home_url('質問表示画面?'.$row->ID); $pattern = $upload_dir['basedir'].'/attach/'.$row->ID.'_0.*'; $files = glob($pattern); if (empty($files)) { $view = '<img src="ダミー画像パス">'; } else { $info = pathinfo($files[0]); $attach_url = $upload_dir['baseurl'].'/attach/'.$info['basename']; $ext = $info['extension']; switch ($ext) { case 'jpeg': case 'png': $view = '<img style="height: 50px;" src="'.$attach_url.'">'; break; case 'mp4': $view = '<video style="height: 50px;" src="'.$attach_url.'">'; break; case 'pdf': $view = '<iframe style="height: 50px;" src="'.$attach_url.'"></iframe>'; break; default: $view = ''; break; } } echo '<div><a href="'.$url.'">'.$row->unique_id; echo '<div>'.$row->namae.'</div>'; echo '<div>'.$view.'</div>'; echo '<div>'.mb_strimwidth($row->message, 0, 38, '・・・').'</div>'; echo '</a></div>'; } ?>

    • ベストアンサー
    • PHP
  • WordPressの質問(q10155839)の続

    var_dump($row);で確認したところ登録結果画面と質問表示画面でNULLが表示されております。 コードをたどったところ質問表示画面の$sql = 'SELECT * FROM sortable WHERE URL=%s';で取得に失敗しているのではないかと考えたのですが、エラー原因は分かりますでしょうか? ※データベースにURLは格納されております。 https://imgur.com/5RmSq2Y.jpg ※該当コード $url = substr($_SERVER['REQUEST_URI'], -36); $sql = 'SELECT * FROM sortable WHERE URL=%s'; $query = $wpdb->prepare($sql, $url); $rows = $wpdb->get_results($query); var_dump($row); if (empty($rows)) { echo '質問がみつかりません'; exit; } ________________________________________________________________________ Q.テーブルにカラムを追加して保存するようにしてみてください。 A.アドバイスありがとうございます、下記コードでIPアドレスは保存できるようですが、入力画面、確認画面、表示画面どのタイミングで追加すべきでしょうか? $ip_address = $_SERVER["REMOTE_ADDR"]; //文字列形式から数値 に、数値から文字列形式に変換 $ip_long = ip2long($ip_address); -- ipアドレスのテーブル CREATE TABLE tbl_ips ( `ip` INT(10) NOT NULL ); $sql = "INSERT INTO tbl_ips ( ip ) VALUES ( INET_ATON( $ip ) );" Q.こんな感じになります。 メッセージの一部、については以前やったことがあると思いますので、$row->messageから取得するようにしてみてください。 A.アドバイスありがとうございます、メッセージの一部を取得というコードを考えてみました。1点質問があるのですが、<a href="'.$url.'"></a>を名前、画像、メッセージ全体に1つだけかけたい場合どのようなコードにすればよいのでしょうか? ---- <?php /* Template Name: 質問一覧画面 */ get_header(); $sql = 'SELECT * FROM sortable'; $query = $wpdb->prepare($sql); $rows = $wpdb->get_results($query); $upload_dir = wp_upload_dir(); foreach ($rows as $row) { $url = home_url('質問表示画面?'.$row->URL); $pattern = $upload_dir['basedir'].'/attach/'.$row->ID.'_0.*'; $files = glob($pattern); if (empty($files)) { $view = '<img src="ダミー画像パス">'; } else { $info = pathinfo($files[0]); $attach_url = $upload_dir['baseurl'].'/attach/'.$info['basename']; $ext = $info['extension']; switch ($ext) { case 'jpeg': case 'png': $view = '<img style="height: 50px;" src="'.$attach_url.'">'; break; case 'mp4': $view = '<video style="height: 50px;" src="'.$attach_url.'">'; break; case 'pdf': $view = '<iframe style="height: 50px;" src="'.$attach_url.'"></iframe>'; break; default: $view = ''; break; } } echo '<div><a href="'.$url.'">'.$row->namae.'</a></div>';    echo '<div>'.$view.'</div>'; echo '<div>'.mb_strimwidth($row->message, 0, 38, "・・・").'</div>'; } ---- 昨日教えて頂いた質問掲示板 登録結果画面のタイトルから飛べるページをリンク先として考えておりました。 http://www.irasuto.cfbx.jp/%e9%9b%91%e8%ab%87%e6%8e%b2%e7%a4%ba%e6%9d%bf%e3%80%80%e7%99%bb%e9%8c%b2%e7%b5%90%e6%9e%9c%e7%94%bb%e9%9d%a2/

    • ベストアンサー
    • PHP
  • PHPで一部サイトからRSS情報を取得できない

    PHPを使用して、他のサイトからRSS情報を取得し、 DBにデータを格納する、というような処理をするバッチを作成しています。 SimplePieという無料のライブラリを使用し、 下記のようなファンクションを作成しました。 /* ================= * * RSS情報を最大5件取得 * =================*/ function get_rss_info($feed_url) { // 戻り値 $rss_list = array(); // RSSデータを取得 $feed = new SimplePie(); $feed -> enable_cache(false); $feed -> set_feed_url($feed_url); $feed -> init(); $feed->handle_content_type(); // 過去記事を最大5記事まで取得 $feedItems = $feed -> get_items(0, 5); foreach($feedItems as $item) { // ※自作クラスです $rss = new RSS(); $rss->rss_id = $item -> get_id(); $rss->rss_title = $item -> get_title(); $rss->published_date = $item -> get_date('Y/m/d H:i:s'); $rss->rss_url = $item -> get_permalink(); $rss->rss_text = $item -> get_description(); array_push($rss_list, $rss); } return $rss_list; } 上記のファンクションで、アメブロなどのRSS情報は取得できますし、 一部WordPressサイトのRSS情報も問題なく取得することが出来ました。 しかし、一部のWordPressサイトでは、上記のファンクションを通しても 1つもRSS情報を取得することが出来ず、 配列も空のままで返却されてしまっております。 Feedlyなどの外部サービスで情報が取得できているので、 私のプログラムが悪いのだとは思っているのですが・・・ 自分なりに調査をしてみたのですが、 全く糸口を掴むことができませんでした。 お知恵を貸していただければと思います。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • FlashからPHPへの変数の渡し方について

    初めまして。beterugiusと申します。 ご質問したいのですが、 まず、上下2フレームのindex.phpファイルがあります。 FLASHファイル(top_image.fla)は、シングルフレームのjpegイメージ(三枚の画像をPhotoShopで合成して、一枚のイメージにしてある。)です。 その.flaファイルを書き出した、.swfコンテンツ上をマウスが移動 すると、コンテンツ上のどの部分にマウスがあるかで、下フレームのTHMLが切り替わるようにしたいので、top_image.swf から、index.phpに対して、GETメソッドでページ番号の変数自身を 渡したいのですが、実際にFLASHコンテンツ上をマウスで動かしてみると、ブラウザのアドレス欄に、GETメソッドのクエリー文字列の「?」 だけは追加されているのですが、肝心の変数が渡されておらず、 下フレームのHTMLも切り替わりません。 どうすればちゅんと動くのか、どなたかご回答いただけないでしょうか? -------------------------------------------------------------- 「top_image.fla」 var sendObj:LoadVars = new LoadVars(); var page:Number; function onMouseMove(){ var x:Number = top_image._x; // グラフィックの中心座標 var y:Number = top_image._y; if( 0 <= y && y <= 316 ){ if( 0 <= x && x <= 255 ){ page = 1; sendObj.send("../php/index.php", "page", "GET"); } else if( 256 <= x && x <= 512 ){ page = 2; sendObj.send("../php/index.php", "page", "GET"); } else if(513 <= x && x <= 766 ){ page = 3; sendObj.send("../php/index.php", "page", "GET"); } } } -------------------------------------------------------------- 「index.php」 <html> <head><title>ActionScript2.0</title> <meta http-equiv="content-type" content="application/x-www-form-urlencoded"> </head> <frameset rows="350,*"> <frame name="top" src="../html/top.html"> <?php // Action ScriptからのPOSTデータの取得 $page = $_GET['page']; switch($page){ case 1: print("<frame name='bottom' src='../html/bottom1.html'>"); break; case 2: print("<frame name='bottom' src='../html/bottom2.html'>"); break; case 3: print("<frame name='bottom' src='../html/bottom3.html'>"); break; } if(is_null($page)){ // $page変数の中身がNULL(未定義)の場合 print("<frame name='bottom' src='../html/blank.html'>"); } ?> </frameset> </html> -------------------------------------------------------------

    • ベストアンサー
    • Flash
  • functionsでどこまで括るのが正解なのか

    RSSを取得→格納→表示→定期的にキャッシュをphpで行っております。 index.phpにすべて記載したところfunctions.phpを利用したほうが良い、require_onceでpage.phpなどからindex.phpに読み込むようご指摘をいただいたので、コードを考えてみたのですがどの範囲までfunctionで括るのが正解なのかわかりません。 意見がわかれておりまして、役割によって分けるべきという方と、page.phpのみfunctions.phpを使いそのほかはrequire_onceで読み込めばいいという方と、すべてrequire_onceで読み込めばいいという方の3パターンありました。 どの方法が1番適切でしょうか?コードは以下になります。 <?php //別ファイルにして読み込む場合 function db($hlxclitx_wp1){//DB名を引数として受け取る $dbname //DB接続 try { $pdo = new PDO(“mysql:dbname=”$hlxclitx_wp1”_name;host=”localhost”;charset=utf8″,”hlxclitx_wp1”,”E.HrypHWxNmltXgC5eS26”)); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $pdo; }catch (PDOException $e) { echo $e->getMessage(); return $db = null; } } // カテゴリーIDをキーにしたカテゴリー配列を生成 function get_category_name_by_id($categories) { foreach (get_categories() as $category) { $categories[$category->cat_ID] = $category; } // 投稿の情報を追加 function set_other_data($post) { // アイキャッチIDを取得 $post_thumbnail_id = get_post_thumbnail_id($post); // アイキャッチ画像の確認 if ($post_thumbnail_id) { // 存在する $image_src = wp_get_attachment_image_src($post_thumbnail_id); // サムネイルの画像URLを設定 $post->thumbnail = $image_src[0]; } else { // 存在しない $post->thumbnail = 'noimage.jpg'; } // カテゴリーIDを取得 $post->categories = wp_get_post_categories($post->ID); // コメントテキスト if (0 == $post->comment_count) { // コメントなし $post->comments = __('No Comments'); } else { // コメントあり $post->comments = $post->comment_count.'件のコメント'; } // コメントリンク $post->comments_link = get_comments_link($post->ID); } //古いデータを削除 //※先に実行する //ものがないものはfunctons.phpに書いても使えないので、require_onceでまとめて読み込む認識 function delete_date_pdo($delete_date) { $sql = 'DELETE FROM rss_feed WHERE date < ?'; $stmt = $dbh->prepare($sql); $delete_date = date('Y-m-d H:i:s', strtotime('-1 week')); //※削除対象日付 $stmt->execute([$delete_date]); } //RSS保存 function save_url_rss($stmt){//本来は値がほしいところでfunction{}するのだろう長さの加減がわからず $url1 = [ 'http://nns2ch.net/index.rdf', 'http://aqua2ch.net/index.rdf', 'https://worldfn.net/index.rdf', ]; $stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?'); foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) { continue; } foreach ($rss->item as $item) { $dc = $item->children('dc', true); $date = date('Y-m-d H:i:s', strtotime($dc->date)); //※削除対象日付より古いRSSは保存しない if ($date < $delete_date) { continue; } $title = $item->title; $link = $item->link; $content = $item->children('content', true); $result = preg_match('/<img[^>]*src=\"([^"]+)\"[^>]*>/i', $content->encoded, $matches); if (1 == $result) { $img = $matches[1]; } else { $img = ''; } $stmt->execute([$title, $link, $date, $img, $title, $link, $date, $img]); } } } function one_page_count($post_items){ //表示設定 $current_page = $_REQUEST['page'] ?? 1; //現在ページ $block_per_page = 2; //ページあたりブロック件数 $rss_per_block = 18; //ブロックあたりRSS件数 $posts_per_block = 5; //ブロックあたり投稿件数 //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block; //ページあたりRSS件数 $rss_offset = ($current_page - 1) * $rss_per_page; //RSSオフセット $sql = 'SELECT * FROM rss_feed ORDER BY date DESC LIMIT ?,?'; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $rss_offset, PDO::PARAM_INT); $stmt->bindParam(2, $rss_per_page, PDO::PARAM_INT); $stmt->execute(); $rss_items = $stmt->fetchAll(PDO::FETCH_OBJ); //投稿読み込み $posts_per_page = $block_per_page * $posts_per_block; //ページあたり投稿件数 $posts_offset = ($current_page - 1) * $posts_per_page; //投稿オフセット $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, ]; $post_items = get_posts($args); } ?>

    • ベストアンサー
    • PHP
  • RSSと投稿記事を交互に表示させたい

    内容の修正が必要ですが原因がわかりません 1.投稿に画像やカテゴリーなどが表示されず、タイトルと日付けのみ表示されている 2.RSS画像にURLがついておらず画像のみ表示されている 3.RSSの画像がない場合ダミー画像を表示させたいが書き方が調べてもわからない <?php $dbh = connect_db(); $categories = []; foreach (get_categories() as $category) { $categories[$category->cat_ID] = $category; } function set_other_data($post) { // アイキャッチIDを取得 $post_thumbnail_id = get_post_thumbnail_id($post); // アイキャッチ画像の確認 if ($post_thumbnail_id) { // 存在する $image_src = wp_get_attachment_image_src($post_thumbnail_id); // サムネイルの画像URLを設定 $post->thumbnail = $image_src[0]; } else { // 存在しない $post->thumbnail = 'noimage.jpg'; } // カテゴリーIDを取得 $post->categories = wp_get_post_categories($post->ID); // コメントテキスト if (0 == $post->comment_count) { // コメントなし $post->comments = __('No Comments'); } else { // コメントあり $post->comments = $post->comment_count.'件のコメント'; } // コメントリンク $post->comments_link = get_comments_link($post->ID); } delete_old_rss($dbh);//接続オブジェクトを渡す //RSS保存 $dbh = connect_db();//① $stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?');//② $url1 = get_rss_site_url(); foreach ($url1 as $url) { if (($rss = @simplexml_load_file($url)) === false) { continue; } foreach ($rss->item as $item) { $dc = $item->children('dc', true); $date = date('Y-m-d H:i:s', strtotime($dc->date)); if ($date < $delete_date) { continue; } $title = $item->title; $link = $item->link; $content = $item->children('content', true); $result = preg_match('/<img[^>]*src=\"([^"]+)\"[^>]*>/i', $content->encoded, $matches); if (1 == $result) { $img = $matches[1]; } else { $img = ''; } $stmt->execute([$title, $link, $date, $img, $title, $link, $date, $img]); } } if (ctype_digit($_REQUEST['page'])) { $current_page = (int) $_REQUEST['page']; } else { $current_page = 1; } if ($current_page > $wp_query->max_num_pages) { $current_page = $wp_query->max_num_pages; } $block_per_page = 2; $rss_per_block = 18; $posts_per_block = $wp_query->post_count / $block_per_page; //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block; $rss_offset = ($current_page - 1) * $rss_per_page; $sql = 'SELECT * FROM rss_feed ORDER BY date DESC LIMIT ?,?'; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $rss_offset, PDO::PARAM_INT); $stmt->bindParam(2, $rss_per_page, PDO::PARAM_INT); $stmt->execute(); $rss_items = $stmt->fetchAll(PDO::FETCH_OBJ); $posts_per_page = $block_per_page * $posts_per_block; $posts_offset = ($current_page - 1) * $posts_per_page; $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, ]; $post_items = get_posts($args); //表示 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h2>ブロック</h2>'; echo '<h3>RSS</h3>'; 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]; echo '<ul>'; echo "<li class=\"sitelink\"><a href=\"{$item->link}\">{$item->title}</a></li>"; echo "<li class=\"sitelink\"><a href=\"{$item->link}\">site</a></li>"; echo "<li class=\"sitedate\">{$item->date}</li>"; if (!empty($item->img)) { echo "<li><img src=\"{$item->img}\" width=\"100\"></li>"; } echo '</ul>'; } echo '<h3>投稿</h3>'; for ($j = 0; $j < $posts_per_block; ++$j) { $item_index = $i * $posts_per_block + $j; if ($item_index >= count($post_items)) { break; } $item = $post_items[$item_index]; echo '<ul>';   echo "<li><a href=\"{$item->guid}\">{$item->post_title}</a></li>"; echo "<li>{$item->post_date}</li>"; echo '</ul>'; } }

    • ベストアンサー
    • PHP
  • Wordpressでのphp(投稿ナビを非表示に)

    WordpressでWebサイトを制作中です。 トップページに最新の投稿が表示できるようにしたのですが、その下に自動的に挿入されるページナンバー(次のページへの遷移)が動作しません。 (画像の、1,2,3、、、、13 のナンバーの部分です) 恐らく、Wordpressの「投稿」ページではなく、固定ページであるトップページにこの機能を組み込んだためかと思うのですが、特にページナンバーを表示させる必要がないため、ページナンバーだけを削除あるいは非表示にしたいのですが、phpの該当部分を削除すればいいのでしょうか? phpの知識がないために、お教えください。 Wordpressのファイル「page-home.php」の中に記述されてある中で、恐らく該当部分は以下かと思うのですが、この中で、どの部分を削除すればいいのでしょうか? 部分的に何度か削除してアップロードして試してみたのですが、不思議なことに、どの部分を削除しても、ページナンバーは消えません。 --------------------------------------------------- <!--LATEST POSTS--> <?php if(of_get_option('latstpst_checkbox') == "1"){ ?> <?php $args = array( 'post_type' => 'post', 'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1)); query_posts($args); ?> <?php get_template_part(''.$zn_lays = of_get_option('layout_images', 'layout1').''); ?> <?php } else { ?> <?php } ?> <!--LATEST POSTS END--> -------------------------------------------------------- ちなみに、Wordpressは最新のバージョン 4.9.5–ja、 テンプレートの「Ttheron_lite」を利用しています。 情報として不足部分がありましたら、申し訳ありません。 ご指摘くださいましたら、情報を追加いたします。 なお、ブラウザに表示後にHTMLソースから、ナンバー部分に相当しそうな 部分のクラスに対して、 display: none; をstyle.cssに記述することも試してみたのですが、 やはり表示は消えません。 参考:http://evm-label.com/2015/05/wp_postnavi_hide01/ HTMLソースでは、この部分のようです。 <div class="thn_paginate"><span class='amp_title'>Pages:</span><a href='...../wp/' class='amp_page amp_current'>1</a><a href='...../wp/page/2/' class='amp_page'>2</a><a href='...../wp/page/3/' class='amp_page'>3</a><a href='...../wp/page/4/' class='amp_page'>4</a><a href='...../wp/page/5/' class='amp_page'>5</a><a href='...../wp/page/6/' class='amp_page'>6</a><a href='...../wp/page/7/' class='amp_page'>7</a><span class='amp_gap'>...</span><a href='...../wp/page/13/' class='amp_page'>13</a><a href='...../wp/page/2/' class='amp_next'>&raquo;</a></div> <div class="hidden_nav"></div> リンクのURL部分は、サイト公開前のために、伏せています(問題ありますでしょうか?) よろしくお願いいたします。

    • 締切済み
    • PHP
  • エスケープ処理

    どうも初めまして。 switch文を用いてページを振り分けてますが、 この場合$_GETはhtmlspecialcharsでエスケープ処理するべきでしょうか?それともSQL構文が入力されることも考えられるのでmysql_real_escape_string()も使うべきなのでしょうか? ああ混乱してます><; どなたか、よろしくお願いします if(isset($_GET['page'])){ $page = $_GET['page']; }else{ $page = "home"; } switch ($page) { case 'home': require ("home.php"); break; ~同じようなのが複数~略 default: echo "ページが見つかりませんでした"; break; }

    • ベストアンサー
    • PHP