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文にしました。
実行すると元のコードでとれていたコンテンツも取得できなくなりました。
お知恵をいただけると幸いです。。
回答1件
あなたの回答
tips
プレビュー