• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLに条件を追加したいのですが方法が分かりません)

SQLに条件を追加する方法とは

dell_OKの回答

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (746/5661)
回答No.104

【cron その6】 ・下記コードで自動的にファイルを読み込む、wp-load.phpというのはすでに設置されているものなのでしょうか? すでに設置されています。 WordPressの最初のフォルダ内にありますので確認してみてください。 ./../../../wp-load.php これを説明しておきます。 最初の「./」は自分のフォルダと言う意味です。 storage_rss.phpを設置した場所、つまりテーマフォルダですね。 次に「../」はひとつ上の階層のフォルダと言う意味です。 テーマフォルダから見てひとつ上の階層はthemesフォルダです。 さらに「../」があるのでそのひとつ上の階層はwp-contentフォルダです。 さらに「../」があるのでそのひとつ上の階層はWordPressのフォルダというわけです。 ・テーブル名の取得をfunctions.phpに移して、functions.phpに再び同じ処理を追加する? そうです。 その同じ部分だけの関数をget_rss_table_name()として追加します。 ・front-page.phpのコードを書き直した理由がよくわからないのですが、具体的にどのようなつくりに変更したのでしょうか?↓ 問題があった行はこれです。 ----front-page.php $rss_table_name = storage_rss(1); ---- 書き直したのはこうです。 ----front-page.php $rss_table_name = get_rss_table_name(1); ---- 呼び出す関数が変わっています。 ただそれだけです。 直されたコードをちょっと見てみました。 移動してはいけないコードが移動してきてますので戻しておいてください。 ----storage_rss.php if (!function_exists('display_maintenance')) { function display_maintenance() { echo <<<maintenance <hr> ただいまメンテナンス中です。<br> しばらく時間をおいてアクセスしてください。 <hr> maintenance; } } ---- 以前からある不要な部分を削除してください。 ----front-page.php //接続 $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
質問者

お礼

https://okwave.jp/qa/q10013003.html 質問の期限が切れてしまったようです。続きはこちらからよろしくお願い致します。

php_learn
質問者

補足

【cron その6】 ・下記コードで自動的にファイルを読み込む、wp-load.phpというのはすでに設置されているものなのでしょうか? すでに設置されています。 WordPressの最初のフォルダ内にありますので確認してみてください。 A.確認したところ存在しておりました。ありがとうございます。 問題があった行はこれです。 ----front-page.php $rss_table_name = storage_rss(1); ---- 書き直したのはこうです。 ----front-page.php $rss_table_name = get_rss_table_name(1); ---- 呼び出す関数が変わっています。 ただそれだけです。 A.関数だけ書き換えたのですね。説明ありがとうございます。 cron化は初めてで大がかりな修正が必要なのか心配でしたが、とても勉強になりました。ありがとうございます。 次はカテゴリーページを作成していきたいのですが、通常のカテゴリーページと別に、 カテゴリーのクリックランキングを表示したいと思っております。Ajaxを使いクリック回数をカウントしてphpに上位20件のカテゴリー名を出力させる コードを組んでいるのですが、固定ページの記事1つ1つにもカテゴリーを表示させる予定のため、設計がまだしっかり決まっていない状態です。 SQLを使いカテゴリーコンテンツを表示しながら、カテゴリークリックランキング(上位20件数)を表示するには下記の方法でも可能でしょうか? ※ボットの判別や2重クリック防止など対策が必要なためPHPではなくAjaxカウントを使うことにしました。 __________________________________________________________________________________________________________________________ category.php //タグID取得(single_rss_feedのみ) $tag = get_tags(array('meta_key' => 'single_rss_feed')); $tag_id = $tag->term_id; <?= file_exists('count_' . $tag_id) ? @file_get_contents('count_' . $tag_id) : 0 ?> //クリック数を取得 $(document).on('click','.category_button',function(){//ボタンクリックが行われたとき var $target = $(this);//(this)が代入される var count = Number($target.find('.good_counter').html())+1;//「find()」は、対象となる要素から下にある階層をすべて辿って目的の「子要素」を取得することができるメソッド jQuery.ajax({ url: '<?=admin_url('admin-ajax.php')?>', type: 'POST', data: { 'action' : 'count_up', 'postID' : $target.data('id') }, success: function(data) { $('.good_counter').html(count); } }); return false; }); ___________________________________________________________________________________________________________________________ category-count.php $file = 'count_' . $tagID; $fp = fopen($file, 'c+'); flock($fp, LOCK_EX); if (($cnt = fread($fp, 1024)) === false) $cnt = 0; $cnt++; ftruncate($fp, 0); rewind($fp); fwrite($fp, $cnt); flock($fp, LOCK_UN); die($cnt);

関連するQ&A

  • 【WordPress】投稿がないカテゴリ非表示方法

    【WordPress】 投稿がないカテゴリー 非表示 方法 カテゴリーの1つを決め すべての子カテゴリーと投稿を表示させる際に、 子カテゴリー内に投稿がない場合、 子カテゴリー名を表示させないようにしたいです。 下記のソースでうまくいきませんでした。 <?php $chihirdren=get_categories( 'parent=5&hide_empty=0&orderby=slug&order=DESC'); foreach($chihirdren as $child){ ?> <?php if(have_posts()):?> <h2><?php echo $child->cat_name ?></h2> <?php else: // no post ?> <?php endif; ?> <?php $wp_query->query(array('cat'=>$child->cat_ID,'posts_per_page'=>-1)); while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <h3><?php the_title(); ?></h3> <?php endwhile; } ?> 大変申し訳ございません。 ご教授をお願いいたします。。

    • ベストアンサー
    • 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のカテゴリーについてご質問させてください。 カスタム投稿に、該当するカテゴリーを表示する予定です。 しかし、子カテゴリーの選択があれば子カテゴリーのみに。 子カテゴリーの選択がなければ該当する親カテゴリーを表示する分岐の方法が分からず困っています。 現在、子カテゴリーのみ表示になっていますが、ここからどのように分岐すればよいのでしょうか。 ご教授いただけると幸いです。 何卒、宜しくお願いいたします。 <ul> <?php $terms = get_the_terms( $post ->ID, '〇〇-cat' ); foreach( $terms as $term ) { if($term->parent){ echo '<li>'.$term->name.'</li>'; } } ?> </ul>

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

    前後の記事のコメント欄を標示する方法がわかりません。 <?php $team = get_post_meta($post->ID, 'team', true);//赤、青、緑のチームに分ける // 投稿オブジェクトの取得 if ('red' === $team) { $post_red = $post; // 赤(現在) $post_blue = get_adjacent_post(true, '', false); // 青(現在の次) $post = $post_blue; // 現在を青に置きかえる $post_green = get_adjacent_post(true, '', false); // 緑(現在の次:青の次) $post = $post_red; // 現在を赤に戻す } elseif ('blue' === $team) { $post_blue = $post; // 青(現在) $post_red = get_adjacent_post(true, '', true); // 赤(現在の前) $post_green = get_adjacent_post(true, '', false); // 緑(現在の次) } elseif ('green' === $team) { $post_green = $post; // 緑(現在) $post_blue = get_adjacent_post(true, '', true); // 青(現在の前) $post = $post_blue; // 現在を青に置きかえる $post_red = get_adjacent_post(true, '', true); // 赤(現在の前:青の前) $post = $post_green; // 現在を緑に戻す } /*$post_thumbnail_id = get_post_thumbnail_id($post);//画像の投稿データから画像IDを取得する ※おそらくいらない */ $red_post_thumbnail_id = get_post_thumbnail_id($post_red);//赤、青、緑の投稿データから前後の画像IDを取得する $blue_post_thumbnail_id = get_post_thumbnail_id($post_blue); $green_post_thumbnail_id = get_post_thumbnail_id($post_green); $red_post_image_src = wp_get_attachment_image_src($red_post_thumbnail_id);//赤、青、緑の投稿データから前後の画像URLを取得する $blue_post_image_src = wp_get_attachment_image_src($blue_post_thumbnail_id); $green_post_image_src = wp_get_attachment_image_src($green_post_thumbnail_id); /*$post_id = post_id ($post_red,$post_blue,$post_green);*/ ※$argsで設定済みなので多分必要ない // コメントオブジェクトの取得 $args = [ 'author__not_in' => '1', // 管理者を除く 'status' => 'approve', // 承認済み 'type' => 'comment', // コメント ]; $args['post_id'] = $post_red->ID; // 赤のID $comments_red = get_comments($args); // 赤のコメント $args['post_id'] = $post_blue->ID; // 青のID $comments_blue = get_comments($args); // 青のコメント $args['post_id'] = $post_green->ID; // 緑のID $comments_green = get_comments($args); // 緑のコメント // コメントの表示 if (empty($comments_red)) { echo '<p>コメントなし</p>'; } else { echo '<ul>'; foreach ($comments_red as $comment) { echo "<li>{$comment->comment_content}</li>"; } echo '</ul>'; } if (empty($comments_blue)) { echo '<p>コメントなし</p>'; } else { echo '<ul>'; foreach ($comments_blue as $comment) { echo "<li>{$comment->comment_content}</li>"; } echo '</ul>'; } if (empty($comments_green)) { echo '<p>コメントなし</p>'; } else { echo '<ul>'; foreach ($comments_green as $comment) { echo "<li>{$comment->comment_content}</li>"; } echo '</ul>'; }

    • ベストアンサー
    • PHP
  • phpとmysqlでサイトのコンテンツを制作しているのですが...

    phpとmysqlでサイトのコンテンツを制作しているのですが、どうにも解決できないのでどなたかアドバイスをいただけないでしょうか? mysqlで $result = @mysql_query( 'drop tabl main_categories;' ); $sqlstr = "create table main_categories (id INTEGER primary key AUTO_INCREMENT,"."category TEXT)"; $result = mysql_query( $sqlstr ); としてテーブルを作ってこれをphpでデータを取得し格納したいのですがうまくいきません。取得データを $arr=mysql_fetch_array($result); で格納してforeachで出力?したいのですが。。。 foreach( $arr as $key => $value ) { if($value['category'] != ''){ array_push($categories_arr,$value['category']); array_push($catid_arr,$value['id']); } } どなたか教えてください!もう8hはまってます=3

    • 締切済み
    • PHP
  • あるカテゴリーの固定ページ一覧/WordPress

    <?php wp_list_pages('title_li='); ?>で固定ページ一覧が表示されますが あるカテゴリーの固定ページに限定して一覧表示できないでしょうか。 固定ページにカテゴリーを設定は、functions.phpに add_action('init','add_categories_for_pages'); function add_categories_for_pages(){ register_taxonomy_for_object_type('category', 'page'); } add_action( 'pre_get_posts', 'nobita_merge_page_categories_at_category_archive' ); function nobita_merge_page_categories_at_category_archive( $query ) { if ( $query->is_category== true && $query->is_main_query() ) { $query->set('post_type', array( 'post', 'page', 'nav_menu_item')); } } と記述して、解決しています。

    • ベストアンサー
    • PHP
  • PHPを使ってMySQLのフィールドの追加ができない

    function部分は外部ファイル function getResult($query){ $result[result]=mysql_query($query,$this->connect) or die(mysql_error()); $result[count]=@mysql_num_rows($result[result]); return $result; } $null = ""; $query="insert into main values ($_POST[id],'$_POST[name]',$null,$null,$null,'$null')"; $insert[result]=$db->getResult($query); このように記述してmainテーブル内に新規フィールドの追加をしようとしたのですが、次のようなエラーが出ます。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',,'')' at line 1 $nullは結局NULL値なので、 ($_POST[id],'$_POST[name]',,,,) でやってみたのですが、これも同じです。 当たり前といえば当たり前ですが、 ($_POST[id],'$_POST[name]',,,,)を ($_POST[id],'$_POST[name]')と 省略してみましたが、数が合わないとエラーが返ってきました。 定型のfunctionに頼らず、$insert[result]=$db->getResult($query);のかわりに if(mysql_query($query,$db->connect)){ echo"成功"; }else{ echo"失敗"; } このようにも試してみたのですが、データは追加されず、失敗と表示されてしまいます。 どこをどう修正すればいいでしょうか。 どなたかお助けください。 ちなみに1,3~5番目が数値型で、2,6番目が文字型、1番目以外はNULLを許可しています。 どこもオートインクリメントは使用していません。

    • ベストアンサー
    • PHP
  • 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
  • [wordpress] 固定ページで、カテゴリ名の

    [wordpress] 固定ページで、記事の一覧を表示し、その記事の属するカテゴリ名の表示 wordpressで、商品一覧ページを作成していて、一覧を表示するページは固定ページにしています。 その商品一覧の中で、記事(商品)の属するカテゴリ名を表示させたいのですが どうすればいいでしょうか? 商品が服なので、その商品が属するカテゴリを項目の一つとして出力したいのです。 つまり『抽出した商品毎(have_post()の出力結果)にカテゴリ名を抽出』という感じです。 具体的なソースも教えて頂けると助かります。 <?php the_category(); ?> はダメでした。 [参考ソース] <div id="collectionWrap" class="clearfix"> <?php $loop = new WP_Query( array( 'post_type' => 'collection', 'posts_per_page' => 8 ) ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="collection"> <div class="image"> <a href="<?php the_permalink() ?>"><?php echo wp_get_attachment_image(get_post_meta($post->ID,"画像",true),'medium' ); ?></a> </div> <div class="txt"> <div class="clearfix mb10"> <p class="upDate"><?php echo get_post_meta($post->ID,"性別",true); ?></p> <p class="seasons"> <span> /*ここにカテゴリの種類を出力 */ </span></p> </div> <p class="itemName"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p> <p class="itemPrice">&yen;&nbsp;<?php echo get_post_meta($post->ID,"価格",true); ?></p> </div> </div> <?php endwhile; ?> <?php wp_reset_query(); ?> </div> どうかよろしく御願いします。足りない情報等あればおっしゃってください。 自分でもいろいろ調べてるのですが、わかりません。。急いでます。

    • ベストアンサー
    • PHP
  • php selectbox hidden

    formでselectboxを作っています。 入力画面→確認画面→DB登録という流れになっており、 selectboxもDB内からひっぱりforeachで回しています。 入力画面 <select name="cat" id="cat" class="postform"> <option value="0">-- 選択してください --</option> <?php foreach ($categories as $category) { echo '<option value="' .$category->term_id. '">' .$category->cat_name. '</option>'."\n"; } </select> のようにしています。 DBの接続は省かせていただきます。 確認画面 echo $_POST['cat']; としていますが、このままだとvalueの値のみ($category->cat_nameのid)が表示されます。 確認画面では$category->cat_nameと表示され登録時には$category->term_idとしたいです。 どなたかおわかりの方がいらっしゃいましたらよろしくお願いします。

    • 締切済み
    • PHP