質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1606閲覧

WordpressへのSQL文において、postmetaが合致する場合の条件分岐(bogo)

shiramiso

総合スコア25

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/27 02:44

編集2020/09/27 03:10

Wordpressで、ajaxを使った記事取得を実装しています。
以下の記事を参考に実装し、
使用しているソースコード

読み込み~表示までは実現できたのですが
別でインストールしていたbogoという多言語化プラグインを効かせたいです。

SQLでの記事取得時に現在の言語に絞り込めれば良いかなと思い、
SQL文を変更して試してみているのですが、なかなかうまくいきません。。

元のコードは以下です。

php

1<?php 2 3require_once("../../../wp-config.php"); 4 5$now_post_num = $_POST['now_post_num']; 6$get_post_num = $_POST['get_post_num']; 7 8$next_now_post_num = $now_post_num + $get_post_num; 9$next_get_post_num = $get_post_num + $get_post_num; 10 11$sql = "SELECT 12 $wpdb->posts.ID, 13 $wpdb->posts.post_title, 14 $wpdb->posts.post_content 15 FROM 16 $wpdb->posts 17 WHERE 18 $wpdb->posts.post_type = 'post' AND $wpdb->posts.post_status = 'publish' 19 ORDER BY 20 $wpdb->posts.post_date DESC 21 LIMIT $next_now_post_num, $next_get_post_num"; 22 23$next_results = $wpdb->get_results($sql); 24 25$noDataFlg = 0; 26if ( count($results) < $get_post_num || !count($next_results) ) { 27 $noDataFlg = 1; 28} 29 30$html = ""; 31 32foreach ($results as $result) { 33 $html .= '<article>'; 34 $html .= '<h2><a href="'.get_permalink($result->ID).'">'.apply_filters('the_title', $result->post_title).'</a></h2>'; 35 $html .= '<div class="excerpt">'.apply_filters('the_excerpt', $result->post_excerpt).'</div>'; 36 $html .= '</article>'; 37} 38 39$returnObj = array(); 40$returnObj = array( 41 'noDataFlg' => $noDataFlg, 42 'html' => $html, 43); 44$returnObj = json_encode($returnObj); 45 46echo $returnObj; 47?>

上記で一応記事の取得は上手く動きました。
そして、bogoに対応するために以下のように変更をしました。

php

1<?php 2 3require_once("../../../wp-config.php"); 4 5$now_post_num = $_POST['now_post_num']; 6$get_post_num = $_POST['get_post_num']; 7$current_locale = get_locale(); 8 9$next_now_post_num = $now_post_num + $get_post_num; 10$next_get_post_num = $get_post_num + $get_post_num; 11 12$sql = "SELECT 13 $wpdb->posts.ID, 14 $wpdb->posts.post_title, 15 $wpdb->posts.post_content 16 FROM 17 $wpdb->posts 18 LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id) 19 WHERE 20 $wpdb->posts.post_type = 'post' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts._locale = $current_locale 21 ORDER BY 22 $wpdb->posts.post_date DESC 23 LIMIT $next_now_post_num, $next_get_post_num"; 24 25$next_results = $wpdb->get_results($sql); 26 27$noDataFlg = 0; 28if ( count($results) < $get_post_num || !count($next_results) ) { 29 $noDataFlg = 1; 30} 31 32$html = ""; 33 34foreach ($results as $result) { 35 $html .= '<article>'; 36 $html .= '<h2><a href="'.get_permalink($result->ID).'">'.apply_filters('the_title', $result->post_title).'</a></h2>'; 37 $html .= '<div class="excerpt">'.apply_filters('the_excerpt', $result->post_excerpt).'</div>'; 38 $html .= '</article>'; 39} 40 41$returnObj = array(); 42$returnObj = array( 43 'noDataFlg' => $noDataFlg, 44 'html' => $html, 45); 46$returnObj = json_encode($returnObj); 47 48echo $returnObj; 49?>

【変更箇所】
まず、現在の言語をbogoから取得して変数current_localeに格納するため以下を追記

php

1$current_locale = get_locale();

$current_localeをもとに条件分岐して記事を取得しようと思い、SQL文に以下を追記

SQL

1LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)

SQL

1AND $wpdb->posts._locale = $current_locale

調べていると、bogoはカスタムフィールドのようなもので
postmetaというものを使用しておりidは"_locale"とのことでしたので、↑のようなSQL文にしました。

実行すると元のコードでとれていたコンテンツも取得できなくなりました。
お知恵をいただけると幸いです。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'post' AND $wpdb->postmeta.meta_key = '_locale' AND meta_value = '$current_locale' ORDER BY 続く…

だとどうだ

投稿2020/09/27 05:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiramiso

2020/09/27 05:55

SQL文の書き方がウンコだったのですね!!いけました!!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問