SHOW:
|
|
- or go back to the newest paste.
1 | <?php | |
2 | /* | |
3 | Plugin Name: 012 PS Multi Languages | |
4 | Plugin URI: http://wordpress.org/extend/plugins/012-ps-multi-languages/ | |
5 | Description: Manager Multilingual Wordpress for one URL | |
6 | Author: Wang Bin (oh@prime-strategy.co.jp) | |
7 | Version: 1.2 | |
8 | Author URI: http://www.prime-strategy.co.jp/about/staff/oh/ | |
9 | */ | |
10 | ||
11 | /** | |
12 | * ps_multi_languages | |
13 | * | |
14 | * Main Manager Custom Plugin Class | |
15 | * | |
16 | * @package ps_multi_languages | |
17 | */ | |
18 | class ps_multi_languages{ | |
19 | /* | |
20 | *マルチ言語 | |
21 | */ | |
22 | var $multilingual; | |
23 | ||
24 | /* | |
25 | * マルチ言語コード | |
26 | */ | |
27 | var $multilingual_code; | |
28 | ||
29 | /* | |
30 | * 検索の表示タイトル | |
31 | */ | |
32 | var $search_multilingual_title; | |
33 | ||
34 | /* | |
35 | * タクソノミーの頭文字 | |
36 | */ | |
37 | var $prefix_taxonomy; | |
38 | ||
39 | /* | |
40 | * バックエンドの言語(システムの言語) | |
41 | */ | |
42 | var $WPLANGKEY; | |
43 | ||
44 | /* | |
45 | * デフォルトの言語 | |
46 | */ | |
47 | private $load_lang = 'en'; | |
48 | ||
49 | /* | |
50 | * Start Manager Custom on plugins loaded | |
51 | */ | |
52 | function ps_multi_languages( ){ | |
53 | $this->__construct( ); | |
54 | } | |
55 | ||
56 | /* | |
57 | * コンストラクタ. | |
58 | */ | |
59 | function __construct( ) { | |
60 | $this->init( ); | |
61 | ||
62 | } | |
63 | ||
64 | /** | |
65 | * ファンクション名:get_load_lang | |
66 | * 機能概要:ロード言語を取得する | |
67 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
68 | * 作成: | |
69 | * 変更: | |
70 | * @param なし | |
71 | * @return String ロード言語 | |
72 | */ | |
73 | function get_load_lang( ){ | |
74 | return $this->load_lang; | |
75 | } | |
76 | ||
77 | /** | |
78 | * ファンクション名:set_load_lang | |
79 | * 機能概要:ロード言語を設定する | |
80 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
81 | * 作成: | |
82 | * 変更: | |
83 | * @param String ロード言語 | |
84 | * @return なし | |
85 | */ | |
86 | function set_load_lang( $lang ){ | |
87 | ||
88 | if ( $this->multilingual_code[$lang] ): | |
89 | $this->load_lang = $lang; | |
90 | else: | |
91 | $this->load_lang = $this->WPLANGKEY; | |
92 | endif; | |
93 | ||
94 | } | |
95 | ||
96 | /* | |
97 | * initializing | |
98 | */ | |
99 | function init( ){ | |
100 | ||
101 | if( !defined('DOCUMENTROOT') ): | |
102 | define( 'DOCUMENTROOT' , $_SERVER['DOCUMENT_ROOT'] ); | |
103 | endif; | |
104 | ||
105 | if( !defined('HOMEDIR') ): | |
106 | define( 'HOMEDIR' , dirname($_SERVER['DOCUMENT_ROOT']) ); | |
107 | endif; | |
108 | ||
109 | if( !defined('DS') ): | |
110 | define( 'DS', DIRECTORY_SEPARATOR ); | |
111 | endif; | |
112 | ||
113 | define( 'CONFIG_DIR' , '/config' ); | |
114 | ||
115 | define( 'MULTI_LANGUAGES_DIR' , dirname(__FILE__) ); | |
116 | ||
117 | define( 'WPCONTENT_M17N_CONFIG_DIR' , WP_CONTENT_DIR . '/012-m17n-config' ); | |
118 | ||
119 | if ( !$this->ps_012_m17n_include_once_or_notices( )): | |
120 | return; | |
121 | endif; | |
122 | ||
123 | if ( !$this->multilingual || !is_array( $this->multilingual ) ){ | |
124 | add_action('admin_notices', array(&$this,'admin_notices_multilingual')); | |
125 | return; | |
126 | } | |
127 | ||
128 | $this->init_mulit_languages( ); | |
129 | ||
130 | $this->Start( ); | |
131 | ||
132 | } | |
133 | ||
134 | /** | |
135 | * ファンクション名:Start | |
136 | * 機能概要:プラグインの機能実行をスタート | |
137 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
138 | * 作成: | |
139 | * 変更: | |
140 | * @param なし | |
141 | * @return なし | |
142 | */ | |
143 | function Start( ){ | |
144 | ||
145 | if ( is_admin( ) ): | |
146 | //管理画面カスタマイズ | |
147 | add_action( 'admin_init' , array( &$this , 'admin_multilingual_edit' ) ); | |
148 | //タクソノミークラス、投稿編集クラス、一般設定クラスの読み込み | |
149 | add_action( 'admin_init' , array( &$this , 'admin_multilingual_includes' ) ); | |
150 | //サイトのタイトルとキャッチフレーズを多国語対応 | |
151 | add_action( 'admin_init' , array( &$this, 'regist_contact_info_field' ) ); | |
152 | add_filter( 'whitelist_options' , array( &$this, 'add_contact_info_field' ) ); | |
153 | //JSとCSSを読み込みします。 | |
154 | //add_action( 'admin_footer-post.php' , array( &$this, 'add_admin_print_styles' ) ); | |
155 | add_action( 'admin_print_styles-edit-tags.php' , array( &$this, 'add_admin_print_styles' ) ); | |
156 | else: | |
157 | //add_action( 'init' , array( &$this, 'ps_init_multilingua' ) ); | |
158 | //カテゴリー、タグ、タクソノミー | |
159 | add_filter( 'get_terms' , array( &$this, 'ps_multilingual_get_terms') , 10 , 3); | |
160 | add_filter( 'get_the_terms' , array( &$this, 'ps_multilingual_get_the_terms') , 10 , 3); | |
161 | add_filter( 'get_term' , array( &$this, 'ps_multilingual_get_term') , 10 , 2); | |
162 | ||
163 | //言語コード | |
164 | add_filter('language_attributes' , array( &$this, 'ps_language_attributes_multilingual') ); | |
165 | //サイト名と | |
166 | add_filter('bloginfo' , array( &$this, 'ps_bloginfo_multilingual') , 10 , 2); | |
167 | /***********/ | |
168 | add_filter('blog_details' , array( &$this, 'ps_blog_details_multilingual') , 10); | |
169 | ||
170 | // | |
171 | add_filter('locale' , array( &$this, 'ps_locale_multilingual') ); | |
172 | ||
173 | add_filter('wp_list_pages' , array( &$this, 'ps_wp_list_page_multilingual') ); | |
174 | add_filter('wp_nav_menu' , array( &$this, 'ps_wp_nav_menu_multilingual') , 10 , 2); | |
175 | add_filter('wp_page_menu' , array( &$this, 'ps_wp_nav_menu_multilingual') , 10 , 2); | |
176 | //add_filter('language_attributes' , array(&$this,'reset_language_attributes') ); | |
177 | ||
178 | add_filter('wp_title' , array( &$this, 'ps_wp_title_multilingual' ) , 10 , 2); | |
179 | add_filter('single_post_title' , array( &$this, 'ps_single_post_title_multilingual'),10 , 2); | |
180 | add_action('the_posts' , array( &$this, 'ps_012_m17n_the_posts') , 10 , 2); | |
181 | ||
182 | //検索対応 | |
183 | add_filter('pre_get_posts' , array( &$this , 'ps_012_m17n_search' ) ); | |
184 | ||
185 | ||
186 | endif; | |
187 | ||
188 | $this->init_view_mulit_lang( ); | |
189 | } | |
190 | ||
191 | /** | |
192 | * ファンクション名:ps_012_m17n_include_once_or_notices | |
193 | * 機能概要: check confing file and include | |
194 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
195 | * 変更: | |
196 | * @param なし | |
197 | * @return なし | |
198 | */ | |
199 | function ps_012_m17n_include_once_or_notices( ){ | |
200 | if ( is_multisite( ) ): | |
201 | global $blog_id; | |
202 | if (file_exists( WPCONTENT_M17N_CONFIG_DIR . CONFIG_DIR . DS .'config-'.$blog_id.'.php' ) ): | |
203 | include_once ( WPCONTENT_M17N_CONFIG_DIR . CONFIG_DIR . DS .'config-'.$blog_id.'.php' ); | |
204 | return true; | |
205 | endif; | |
206 | if ( file_exists( WPCONTENT_M17N_CONFIG_DIR . CONFIG_DIR . DS .'config.php')): | |
207 | include_once ( WPCONTENT_M17N_CONFIG_DIR . CONFIG_DIR . DS .'config.php' ); | |
208 | return true; | |
209 | endif; | |
210 | if (file_exists( MULTI_LANGUAGES_DIR . CONFIG_DIR . DS .'config-'.$blog_id.'.php' ) ): | |
211 | include_once ( MULTI_LANGUAGES_DIR . CONFIG_DIR . DS .'config-'.$blog_id.'.php' ); | |
212 | return true; | |
213 | endif; | |
214 | if ( file_exists( MULTI_LANGUAGES_DIR . CONFIG_DIR . DS .'config.php')): | |
215 | include_once ( MULTI_LANGUAGES_DIR . CONFIG_DIR . DS .'config.php'); | |
216 | return true; | |
217 | endif; | |
218 | else: | |
219 | if( file_exists( WPCONTENT_M17N_CONFIG_DIR . CONFIG_DIR . DS .'config.php') ): | |
220 | include_once ( WPCONTENT_M17N_CONFIG_DIR . CONFIG_DIR . DS .'config.php' ); | |
221 | return true; | |
222 | endif; | |
223 | if( file_exists( MULTI_LANGUAGES_DIR . CONFIG_DIR . DS .'config.php') ): | |
224 | include_once ( MULTI_LANGUAGES_DIR . CONFIG_DIR . DS .'config.php'); | |
225 | return true; | |
226 | endif; | |
227 | ||
228 | endif; | |
229 | ||
230 | add_action('admin_notices', array(&$this,'custom_taxonomy_admin_notices')); | |
231 | return false; | |
232 | } | |
233 | /** | |
234 | * ファンクション名:init_mulit_languages | |
235 | * 機能概要:デフォルトのロード言語を設定する() | |
236 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
237 | * 変更: | |
238 | * @param なし | |
239 | * @return なし | |
240 | */ | |
241 | function init_mulit_languages( ){ | |
242 | ||
243 | if( defined('MULTILINGUAL_WPLANG') ): | |
244 | $this->WPLANGKEY = MULTILINGUAL_WPLANG; | |
245 | //$this->WPLANGKEY = WPLANG ; | |
246 | elseif( defined('WPLANG') ): | |
247 | $this->WPLANGKEY = WPLANG; | |
248 | else: | |
249 | $WPLANG = get_option('WPLANG' , true); | |
250 | if( $WPLANG ): | |
251 | $this->WPLANGKEY = $WPLANG ; | |
252 | else: | |
253 | $this->WPLANGKEY = 'en' ; | |
254 | endif; | |
255 | endif; | |
256 | ||
257 | $this->WPLANGKEY = strtolower( substr( $this->WPLANGKEY, 0, 2 ) ); | |
258 | unset( $this->multilingual[$this->WPLANGKEY] ); | |
259 | ||
260 | } | |
261 | ||
262 | /** | |
263 | * ファンクション名:admin_multilingual_includes | |
264 | * 機能概要:管理画面の多国語化タクソノミーとポスト | |
265 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
266 | * 変更: | |
267 | * @param resource | |
268 | * @param int | |
269 | * @param string | |
270 | * @return | |
271 | */ | |
272 | function admin_multilingual_includes( ){ | |
273 | //新規編集する場合、多国語化 | |
274 | include_once ( MULTI_LANGUAGES_DIR . '/includes/ps-multilingual-edit-post.php'); | |
275 | ||
276 | //タクソノミー管理画面の多国語化 | |
277 | include_once ( MULTI_LANGUAGES_DIR . '/includes/ps-multilingual-taxonomy.php'); | |
278 | ||
279 | } | |
280 | ||
281 | /** | |
282 | * ファンクション名:init_view_mulit_lang | |
283 | * 機能概要:フォロートの表示ロード言語 | |
284 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
285 | * 変更: | |
286 | * @param resource | |
287 | * @param int | |
288 | * @param string | |
289 | * @return | |
290 | */ | |
291 | function init_view_mulit_lang( ){ | |
292 | ||
293 | if ( $_GET['lang'] ): | |
294 | ||
295 | $this->set_load_lang( $_GET['lang'] ); | |
296 | ||
297 | setcookie( '_ps_enqueue_language', $this->get_load_lang() , time() + 31536000 , "/"); | |
298 | ||
299 | elseif( $_COOKIE['_ps_enqueue_language'] ): | |
300 | ||
301 | $this->set_load_lang( $_COOKIE['_ps_enqueue_language'] ); | |
302 | ||
303 | else: | |
304 | ||
305 | #------------------------------------------------------------------------------------------------- | |
306 | $UserLanguage = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] ); #ユーザー言語の取得 | |
307 | #------------------------------------------------------------------------------------------------- | |
308 | ||
309 | $language = array_shift($UserLanguage); | |
310 | ||
311 | $language = $language ? substr( $language, 0, 2 ) : $language ; | |
312 | ||
313 | $this->set_load_lang( $language ); | |
314 | ||
315 | setcookie( '_ps_enqueue_language', $this->get_load_lang() , time() + 31536000 , "/"); | |
316 | ||
317 | endif; | |
318 | ||
319 | } | |
320 | ||
321 | function ps_init_multilingua( ){ | |
322 | ||
323 | } | |
324 | ||
325 | /** | |
326 | * ファンクション名: | |
327 | * 機能概要: | |
328 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
329 | * 作成: | |
330 | * 変更: | |
331 | * @param resource | |
332 | * @param int | |
333 | * @param string | |
334 | * @return | |
335 | */ | |
336 | function add_admin_print_styles( ){ | |
337 | ||
338 | wp_enqueue_script( 'prefix-js-' . strtolower(__CLASS__) , plugins_url('js/prefix-js.js', __FILE__) ); | |
339 | ||
340 | wp_register_style( 'prefix-style-'. strtolower(__CLASS__) , plugins_url('css/prefix-style.css', __FILE__) ); | |
341 | ||
342 | wp_enqueue_style( 'prefix-style-' . strtolower(__CLASS__) ); | |
343 | } | |
344 | ||
345 | /** | |
346 | * ファンクション名: | |
347 | * 機能概要: | |
348 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
349 | * 作成: | |
350 | * 変更: | |
351 | * @param resource | |
352 | * @param int | |
353 | * @param string | |
354 | * @return | |
355 | */ | |
356 | function ps_locale_multilingual( $locale ){ | |
357 | ||
358 | $multilingual = $this->get_load_lang(); | |
359 | ||
360 | $multilingual_locale = $this->multilingual_code[$multilingual]; | |
361 | ||
362 | return $multilingual_locale ? $multilingual_locale : 'en_US'; | |
363 | ||
364 | } | |
365 | ||
366 | /** | |
367 | * ファンクション名: | |
368 | * 機能概要: | |
369 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
370 | * 作成: | |
371 | * 変更: | |
372 | * @param resource | |
373 | * @param int | |
374 | * @param string | |
375 | * @return | |
376 | */ | |
377 | function ps_bloginfo_multilingual( $show = '', $filter = '' ){ | |
378 | ||
379 | $multilingual = $this->get_load_lang( ); | |
380 | ||
381 | if ( $multilingual == $this->WPLANGKEY && $filter != 'keyword' ){ | |
382 | return $show; | |
383 | } | |
384 | ||
385 | if ( $filter == 'name' || $filter == 'blogname'): | |
386 | $show = $this->get_multilingual_option( $multilingual , 'blogname' ); | |
387 | elseif ( $filter == 'description' || $filter == 'blogdescription' ): | |
388 | $show = $this->get_multilingual_option( $multilingual , 'blogdescription' ); | |
389 | elseif ( $filter == 'keyword' ): | |
390 | $show = $this->get_multilingual_option( $multilingual , $filter ); | |
391 | endif; | |
392 | ||
393 | return $show; | |
394 | } | |
395 | ||
396 | /** | |
397 | * ファンクション名:ps_blog_details_multilingual | |
398 | * 機能概要:子サイトのサイト名を該当言語にする | |
399 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
400 | * 作成: | |
401 | * 変更: | |
402 | * @param Object $details | |
403 | * @param Object $details | |
404 | * @return | |
405 | */ | |
406 | function ps_blog_details_multilingual( $details ){ | |
407 | $multilingual = $this->get_load_lang( ); | |
408 | ||
409 | if ( $multilingual == $this->WPLANGKEY ){ | |
410 | return $details; | |
411 | } | |
412 | ||
413 | if ( is_multisite( ) ): | |
414 | global $blog_id; | |
415 | $blogname = $this->get_multilingual_option( $multilingual , 'blogname' ); | |
416 | ||
417 | if ( $blogname && $blog_id == $details->blog_id ) { | |
418 | $details->blogname = $blogname; | |
419 | } | |
420 | endif; | |
421 | ||
422 | return $details; | |
423 | ||
424 | } | |
425 | ||
426 | /** | |
427 | * ファンクション名: | |
428 | * 機能概要: | |
429 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
430 | * 作成: | |
431 | * 変更: | |
432 | * @param resource | |
433 | * @param int | |
434 | * @param string | |
435 | * @return | |
436 | */ | |
437 | function get_multilingual_option( $lang, $key ){ | |
438 | ||
439 | if ( $key ){ | |
440 | $option = get_option( $key . '_' . $lang ); | |
441 | } | |
442 | if ( $option ){ | |
443 | return $option; | |
444 | } | |
445 | ||
446 | return get_option( $key ); | |
447 | ||
448 | } | |
449 | ||
450 | /** | |
451 | * ファンクション名:ps_language_attributes_multilingual | |
452 | * 機能概要:<html dir="ltr" lang="言語コード">の設定 | |
453 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
454 | * 変更: | |
455 | * @param resource | |
456 | * @param int | |
457 | * @param string | |
458 | * @return | |
459 | */ | |
460 | function ps_language_attributes_multilingual( $output = null ){ | |
461 | $attributes = array(); | |
462 | $doctype = 'html'; | |
463 | ||
464 | if ( preg_match('|xml|' , $output)){ | |
465 | $doctype = 'xhtml'; | |
466 | } | |
467 | ||
468 | if ( $this->get_load_lang() == $this->WPLANGKEY ){ | |
469 | return $output; | |
470 | } | |
471 | ||
472 | if ( function_exists( 'is_rtl' ) ) | |
473 | $attributes[] = 'dir="' . ( is_rtl() ? 'rtl' : 'ltr' ) . '"'; | |
474 | ||
475 | $lang = get_bloginfo('language'); | |
476 | if ( $lang_code ): | |
477 | $lang = str_replace('_', '-', $lang_code); | |
478 | endif; | |
479 | ||
480 | if ( $lang ) : | |
481 | if ( get_option('html_type') == 'text/html' || $doctype == 'html' ) | |
482 | $attributes[] = "lang=\"$lang\""; | |
483 | ||
484 | if ( get_option('html_type') != 'text/html' || $doctype == 'xhtml' ) | |
485 | $attributes[] = "xml:lang=\"$lang\""; | |
486 | endif; | |
487 | ||
488 | $output = implode(' ', $attributes); | |
489 | ||
490 | $output = apply_filters('regist_language_attributes', $output); | |
491 | ||
492 | echo $output; | |
493 | } | |
494 | ||
495 | /** | |
496 | * ファンクション名: | |
497 | * 機能概要: | |
498 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
499 | * 変更: | |
500 | * @param resource | |
501 | * @param int | |
502 | * @param string | |
503 | * @return | |
504 | */ | |
505 | function get_multilingual_code( $lang ){ | |
506 | ||
507 | if ( $lang ): | |
508 | $lang_code = $this->multilingual_code[$lang]; | |
509 | $lang_code = str_replace('_', '-', $lang_code); | |
510 | else: | |
511 | $lang_code = $this->multilingual_code[$this->WPLANGKEY]; | |
512 | $lang_code = str_replace('_', '-', $lang_code); | |
513 | endif; | |
514 | return $lang_code; | |
515 | } | |
516 | ||
517 | /** | |
518 | * ファンクション名:ps_012_m17n_the_posts | |
519 | * 機能概要: 投稿、ページ、カスタム投稿タイプのタイトルと内容を該当言語にする | |
520 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
521 | * 変更: | |
522 | * @param Object $posts | |
523 | * @param Object $query_this | |
524 | * @return Object $posts | |
525 | */ | |
526 | function ps_012_m17n_the_posts( $posts , $query_this){ | |
527 | ||
528 | ||
529 | if ( $this->get_load_lang() == $this->WPLANGKEY ){ | |
530 | return $posts; | |
531 | } | |
532 | ||
533 | if ( !$posts ){ | |
534 | return $posts; | |
535 | } | |
536 | ||
537 | foreach ( $posts as $key => $post){ | |
538 | $multilingual_Name = get_post_meta( $post->ID, 'post_content_' . $this->load_lang , true); | |
539 | ||
540 | if ( $multilingual_Name ): | |
541 | $post->post_content = $multilingual_Name; | |
542 | endif; | |
543 | ||
544 | $multilingual_title = get_post_meta( $post->ID, 'post_title_' . $this->load_lang , true); | |
545 | ||
546 | if ( $multilingual_title ): | |
547 | $post->post_title = $multilingual_title; | |
548 | endif; | |
549 | $multilingual_excerpt = get_post_meta( $post->ID, 'post_excerpt_' . $this->load_lang , true); | |
550 | ||
551 | if ( $multilingual_excerpt ): | |
552 | $post->post_excerpt = $multilingual_excerpt; | |
553 | endif; | |
554 | $post->post_content = preg_replace('|<p>></p>|' , '' , $post->post_content ); | |
555 | $post->post_content = preg_replace('|>|' , '' , $post->post_content ); | |
556 | } | |
557 | ||
558 | return $posts; | |
559 | ||
560 | } | |
561 | ||
562 | /** | |
563 | * ファンクション名:ps_single_post_title_multilingual | |
564 | * 機能概要: 投稿、ページ、カスタム投稿タイプのタイトルを該当言語にする | |
565 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
566 | * 変更: | |
567 | * @param String $title | |
568 | * @param Object $_post | |
569 | * @return String $title | |
570 | */ | |
571 | function ps_single_post_title_multilingual( $title , $_post ){ | |
572 | ||
573 | if ( is_single() || ( is_home() && !is_front_page() ) || ( is_page() && !is_front_page() ) ) { | |
574 | ||
575 | $multilingual_title = get_post_meta( $_post->ID, 'post_title_' . $this->load_lang , true); | |
576 | ||
577 | if ( $multilingual_title ): | |
578 | $title = $multilingual_title; | |
579 | endif; | |
580 | } | |
581 | ||
582 | return $title; | |
583 | } | |
584 | ||
585 | /** | |
586 | * ファンクション名:ps_012_m17n_search | |
587 | * 機能概要:多国化の検索対応 | |
588 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
589 | * 変更: | |
590 | * @param Array $pre | |
591 | * @return Array $pre | |
592 | */ | |
593 | function ps_012_m17n_search( $pre ){ | |
594 | global $blog_id, $wpdb; | |
595 | if ( !is_search() ){ | |
596 | return $pre; | |
597 | } | |
598 | if ( $this->get_load_lang() == $this->WPLANGKEY ){ | |
599 | return $pre; | |
600 | } | |
601 | ||
602 | $lang = $this->get_load_lang(); | |
603 | if ( $lang ){ | |
604 | $meta_query = array( | |
605 | array( | |
606 | 'key' => 'post_title_' . $lang, | |
607 | 'value' => $pre->query_vars['s'], | |
608 | 'compare' => 'LIKE' | |
609 | ), | |
610 | array( | |
611 | 'key' => 'post_content_' . $lang, | |
612 | 'value' => $pre->query_vars['s'], | |
613 | 'compare' => 'LIKE' | |
614 | ), | |
615 | 'relation'=>'OR' | |
616 | ); | |
617 | $teest = $pre->query_vars['s']; | |
618 | $pre->query_vars['s'] = ""; | |
619 | $pre->query_vars['meta_query'] = $meta_query; | |
620 | //add_filter('posts_where', array( &$this , 'ps_search_where' )); | |
621 | } | |
622 | ||
623 | return $pre; | |
624 | } | |
625 | ||
626 | /** | |
627 | * ファンクション名:ps_wp_title_multi_lang | |
628 | * 機能概要:多国語のタイトルを表示する | |
629 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
630 | * 作成: | |
631 | * 変更: | |
632 | * @param String $title(デフォルト語のタイトル) | |
633 | * @return String $title(多国語タイトル) | |
634 | */ | |
635 | function ps_wp_title_multilingual( $title, $mark = '' ){ | |
636 | ||
637 | if ( $this->get_load_lang() == $this->WPLANGKEY ){ | |
638 | return $title; | |
639 | } | |
640 | ||
641 | if ( is_search() ): | |
642 | ||
643 | $lang = $this->get_load_lang(); | |
644 | ||
645 | $searchResults = $this->search_multilingual_title[$lang]; | |
646 | ||
647 | if ( $searchResults ){ | |
648 | $preg_quote = preg_quote($mark,'|'); | |
649 | $title = preg_replace('|' . $preg_quote .'(.*)'. $preg_quote .'|', $mark . ' ' . $searchResults . ' ' . $mark , $title); | |
650 | } | |
651 | ||
652 | if ( $_GET['s'] ): | |
653 | return $_GET['s'] . $title; | |
654 | elseif ( $_POST['s'] ): | |
655 | return $_POST['s'] . $title; | |
656 | endif; | |
657 | endif; | |
658 | return $title; | |
659 | } | |
660 | ||
661 | /** | |
662 | * ファンクション名:ps_wp_nav_menu_multilingual | |
663 | * 機能概要:wp_nav_menuの表示タイトルを該当言語にする | |
664 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
665 | * 変更: | |
666 | * @param Array $nav_menu | |
667 | * @param Array $args | |
668 | * @return Array 全$nav_menu | |
669 | */ | |
670 | function ps_wp_nav_menu_multilingual( $nav_menu, $args ) { | |
671 | ||
672 | if ( $this->get_load_lang() == $this->WPLANGKEY ){ | |
673 | return $nav_menu; | |
674 | } | |
675 | ||
676 | $aliases = $this->get_multilingual_title( ); | |
677 | if ( $aliases ): | |
678 | foreach ( $aliases as $alias ): | |
679 | $nav_menu = preg_replace( '/>' . preg_quote( trim($alias['post_title']), '/' ) . '</', '>' . $alias['meta_value'] . '<', $nav_menu ); | |
680 | endforeach; | |
681 | endif; | |
682 | ||
683 | return $nav_menu; | |
684 | } | |
685 | ||
686 | /** | |
687 | * ファンクション名:ps_wp_list_page_multilingual | |
688 | * 機能概要:wp_list_pageの表示タイトルを該当言語にする | |
689 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
690 | * 変更: | |
691 | * @param Array $global_navi | |
692 | * @return Array 全$global_navi | |
693 | */ | |
694 | function ps_wp_list_page_multilingual( $global_navi ){ | |
695 | ||
696 | if ( $this->get_load_lang() == $this->WPLANGKEY ){ | |
697 | return $global_navi; | |
698 | } | |
699 | ||
700 | $aliases = $this->get_multilingual_title( ); | |
701 | ||
702 | if ( $aliases ): | |
703 | foreach( $aliases as $alias): | |
704 | $global_navi = preg_replace( '/>' . preg_quote( trim($alias['post_title']), '/' ) . '</', '>' . $alias['meta_value'] . '<', $global_navi ); | |
705 | endforeach; | |
706 | endif; | |
707 | return $global_navi; | |
708 | } | |
709 | ||
710 | /** | |
711 | * ファンクション名:get_multilingual_title | |
712 | * 機能概要:全カスタムフィールドを取得 | |
713 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
714 | * 変更: | |
715 | * @param String post_id | |
716 | * @return Array 全カスタムフィールド | |
717 | */ | |
718 | function get_multilingual_title( ){ | |
719 | global $wpdb; | |
720 | $sql =" | |
721 | SELECT a.`post_title`, | |
722 | b.`meta_value` | |
723 | FROM `$wpdb->posts` as a, | |
724 | `$wpdb->postmeta` as b | |
725 | WHERE a.`ID` = b.`post_id` | |
726 | AND b.`meta_key` = 'post_title_{$this->get_load_lang()}'"; | |
727 | ||
728 | if ( $this->get_load_lang() != $this->WPLANGKEY ): | |
729 | $aliases = $wpdb->get_results( $sql, 'ARRAY_A' ); | |
730 | endif; | |
731 | ||
732 | return $aliases; | |
733 | ||
734 | } | |
735 | ||
736 | /** | |
737 | * ファンクション名:get_multilingual_excerpt | |
738 | * 機能概要:全カスタムフィールドを取得 | |
739 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
740 | * 変更: | |
741 | * @param String post_id | |
742 | * @return Array 全カスタムフィールド | |
743 | */ | |
744 | function get_multilingual_excerpt( ){ | |
745 | global $wpdb; | |
746 | $sql =" | |
747 | SELECT a.`post_excerpt`, | |
748 | b.`meta_value` | |
749 | FROM `$wpdb->posts` as a, | |
750 | `$wpdb->postmeta` as b | |
751 | WHERE a.`ID` = b.`post_id` | |
752 | AND b.`meta_key` = 'post_excerpt_{$this->get_load_lang()}'"; | |
753 | ||
754 | if ( $this->get_load_lang() != $this->WPLANGKEY ): | |
755 | $aliases = $wpdb->get_results( $sql, 'ARRAY_A' ); | |
756 | endif; | |
757 | ||
758 | return $aliases; | |
759 | ||
760 | } | |
761 | ||
762 | /** | |
763 | * ファンクション名:get_ps_post_customs | |
764 | * 機能概要:全カスタムフィールドを取得 | |
765 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
766 | * 変更: | |
767 | * @param String post_id | |
768 | * @return Array 全カスタムフィールド | |
769 | */ | |
770 | function get_ps_post_customs( $post_id ){ | |
771 | $custom_fields = get_post_custom($post_id); | |
772 | $return = array(); | |
773 | foreach( $custom_fields as $key => $field ){ | |
774 | if ( count( $field ) > 1 ){ | |
775 | foreach ( $field as $key2 => $val ){ | |
776 | $return[$key][$key2] = $val; | |
777 | } | |
778 | }else{ | |
779 | if ( preg_match('/^_(.*)/' , $key )){ | |
780 | $return[$key] = maybe_unserialize($field[0]) ; | |
781 | }else{ | |
782 | $return[$key] = $field[0]; | |
783 | } | |
784 | } | |
785 | } | |
786 | return $return; | |
787 | } | |
788 | ||
789 | ||
790 | /** | |
791 | * ファンクション名: | |
792 | * 機能概要: | |
793 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
794 | * 変更: | |
795 | * @param resource | |
796 | * @param int | |
797 | * @param string | |
798 | * @return | |
799 | */ | |
800 | function ps_multilingual_get_terms ( $terms, $taxonomies, $args ){ | |
801 | ||
802 | $lang = $this->get_load_lang( ); | |
803 | ||
804 | $current_option = get_option( $taxonomies[0] . '-' . $lang ); | |
805 | ||
806 | foreach ( $terms as $key => $term ): | |
807 | if ( $this->WPLANGKEY != $lang ): | |
808 | $multilingual_Name = $current_option[$term->term_id]; | |
809 | if ( $multilingual_Name ): | |
810 | $terms[$key]->name = is_array($multilingual_Name) ? join(',', $multilingual_Name) : $multilingual_Name ; | |
811 | endif; | |
812 | endif; | |
813 | ||
814 | endforeach; | |
815 | ||
816 | return $terms; | |
817 | } | |
818 | ||
819 | /** | |
820 | * ファンクション名: | |
821 | * 機能概要: | |
822 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
823 | * 変更: | |
824 | * @param resource | |
825 | * @param int | |
826 | * @param string | |
827 | * @return | |
828 | */ | |
829 | function ps_multilingual_get_the_terms( $terms, $id, $taxonomy ){ | |
830 | $lang = $this->get_load_lang( ); | |
831 | ||
832 | $current_option = get_option( $taxonomy . '-' . $lang ); | |
833 | ||
834 | foreach ( $terms as $key => $term ): | |
835 | if ( $this->WPLANGKEY != $lang ): | |
836 | $multilingual_Name = $current_option[$term->term_id]; | |
837 | if ( $multilingual_Name ): | |
838 | $terms[$key]->name = is_array($multilingual_Name) ? join(',', $multilingual_Name) : $multilingual_Name ; | |
839 | endif; | |
840 | endif; | |
841 | ||
842 | endforeach; | |
843 | ||
844 | return $terms; | |
845 | } | |
846 | ||
847 | /** | |
848 | * ファンクション名: | |
849 | * 機能概要: | |
850 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
851 | * 変更: | |
852 | * @param resource | |
853 | * @param int | |
854 | * @param string | |
855 | * @return | |
856 | */ | |
857 | function ps_multilingual_get_term( $term, $taxonomy ){ | |
858 | $lang = $this->get_load_lang( ); | |
859 | $current_option = get_option( $taxonomy . '-' . $lang ); | |
860 | ||
861 | $multilingual_Name = $current_option[$term->term_id]; | |
862 | ||
863 | if ( $this->WPLANGKEY != $lang ): | |
864 | if ( $multilingual_Name ): | |
865 | $term->name = is_array($multilingual_Name) ? join(',', $multilingual_Name) : $multilingual_Name ; | |
866 | endif; | |
867 | endif; | |
868 | ||
869 | return $term; | |
870 | ||
871 | } | |
872 | ||
873 | /** | |
874 | * ファンクション名: | |
875 | * 機能概要: | |
876 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
877 | * 変更: | |
878 | * @param resource | |
879 | * @param int | |
880 | * @param string | |
881 | * @return | |
882 | */ | |
883 | function regist_contact_info_field() { | |
884 | ||
885 | $flag_icon = $this->flags_dir . $this->WPLANGKEY . '.png'; | |
886 | - | if ( url_exists( $flag_icon )): |
886 | + | if ( ps_url_exists( $flag_icon )): |
887 | $flag_icon = '<img src="' . $flag_icon. '"> '; | |
888 | endif; | |
889 | add_settings_field( 'hr_' . $this->WPLANGKEY , $flag_icon , array($this , 'display_option_general_hr' ), 'general' , 'default' , array($this->WPLANGKEY)); | |
890 | ||
891 | add_settings_field( 'keyword_en' , __('Term') , array($this , 'display_keyword_info' ), 'general' , 'default' , array($this->WPLANGKEY)); | |
892 | ||
893 | foreach ( $this->multilingual as $key => $lang ): | |
894 | $flag_icon = $this->flags_dir . $key . '.png'; | |
895 | - | if ( url_exists( $flag_icon )): |
895 | + | if ( ps_url_exists( $flag_icon )): |
896 | $flag_icon = '<img src="' . $flag_icon. '"> '; | |
897 | endif; | |
898 | add_settings_field( 'hr_' . $key , $flag_icon . $lang , array($this , 'display_option_general_hr' ), 'general' , 'default' , array($key)); | |
899 | add_settings_field( 'blogname_' . $key , __('Site Title') , array($this , 'display_blogname_info' ), 'general' , 'default' , array($key)); | |
900 | add_settings_field( 'blogdescription_' . $key , __('Site Tagline') , array($this , 'display_blogdescription_info' ), 'general' , 'default' , array($key)); | |
901 | add_settings_field( 'keyword_' . $key , __('Term') , array($this , 'display_keyword_info' ), 'general' , 'default' , array($key)); | |
902 | endforeach; | |
903 | ||
904 | } | |
905 | ||
906 | /** | |
907 | * ファンクション名: | |
908 | * 機能概要: | |
909 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
910 | * 変更: | |
911 | * @param resource | |
912 | * @param int | |
913 | * @param string | |
914 | * @return | |
915 | */ | |
916 | function display_blogname_info( $lang ) { | |
917 | $lang = $lang[0]; | |
918 | $blogname_lang = get_option( 'blogname_' . $lang ); | |
919 | ?> | |
920 | <input type="text" id="blogname_<?php echo $lang;?>" name="blogname_<?php echo $lang;?>" value="<?php echo esc_html( $blogname_lang ); ?>" class="regular-text"> | |
921 | <?php | |
922 | } | |
923 | ||
924 | /** | |
925 | * ファンクション名: | |
926 | * 機能概要: | |
927 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
928 | * 変更: | |
929 | * @param resource | |
930 | * @param int | |
931 | * @param string | |
932 | * @return | |
933 | */ | |
934 | function display_option_general_hr( $lang ){ | |
935 | ||
936 | } | |
937 | ||
938 | /** | |
939 | * ファンクション名: | |
940 | * 機能概要: | |
941 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
942 | * 変更: | |
943 | * @param resource | |
944 | * @param int | |
945 | * @param string | |
946 | * @return | |
947 | */ | |
948 | function display_blogdescription_info( $lang ) { | |
949 | $lang = $lang[0]; | |
950 | $blogdescription_lang = get_option( 'blogdescription_' . $lang ); | |
951 | ?> | |
952 | <input type="text" id="blogdescription_<?php echo $lang;?>" name="blogdescription_<?php echo $lang;?>" value="<?php echo esc_html( $blogdescription_lang ); ?>" class="regular-text"> | |
953 | <?php | |
954 | } | |
955 | ||
956 | /** | |
957 | * ファンクション名: | |
958 | * 機能概要: | |
959 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
960 | * 変更: | |
961 | * @param resource | |
962 | * @param int | |
963 | * @param string | |
964 | * @return | |
965 | */ | |
966 | function display_keyword_info( $lang ) { | |
967 | $lang = $lang[0]; | |
968 | $keyword_lang = get_option( 'keyword_' . $lang ); | |
969 | ?> | |
970 | <input type="text" id="keyword_<?php echo $lang;?>" name="keyword_<?php echo $lang;?>" value="<?php echo esc_html( $keyword_lang ); ?>" class="regular-text"> | |
971 | <?php | |
972 | } | |
973 | ||
974 | /** | |
975 | * ファンクション名: | |
976 | * 機能概要: | |
977 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
978 | * 変更: | |
979 | * @param resource | |
980 | * @param int | |
981 | * @param string | |
982 | * @return | |
983 | */ | |
984 | function add_contact_info_field( $whitelist_options ) { | |
985 | ||
986 | foreach ( $this->multilingual as $key => $lang ): | |
987 | $whitelist_options['general'][] = 'blogname_' . $key; | |
988 | $whitelist_options['general'][] = 'blogdescription_' . $key; | |
989 | $whitelist_options['general'][] = 'keyword_' . $key; | |
990 | endforeach; | |
991 | $whitelist_options['general'][] = 'keyword_en'; | |
992 | return $whitelist_options; | |
993 | } | |
994 | ||
995 | /** | |
996 | * ファンクション名:admin_multilingual_edit | |
997 | * 機能概要:管理画面のカスタマイズ処理 | |
998 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
999 | * 変更: | |
1000 | * @param resource | |
1001 | * @param int | |
1002 | * @param string | |
1003 | * @return | |
1004 | */ | |
1005 | function admin_multilingual_edit( ){ | |
1006 | ||
1007 | //カスタマイズ処理国旗のディレクトリを取得する | |
1008 | $this->flags_dir = plugins_url('flags/', __FILE__); | |
1009 | ||
1010 | } | |
1011 | ||
1012 | /** | |
1013 | * ファンクション名:ps_012_multilingual_list | |
1014 | * 機能概要:多国語の切替リンクを設定する | |
1015 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
1016 | * 変更: | |
1017 | * @param String $lang | |
1018 | * @return String $snippet | |
1019 | */ | |
1020 | function ps_012_multilingual_list( $lang = null ){ | |
1021 | if ( !$lang ){ | |
1022 | $lang = $this->get_load_lang(); | |
1023 | } | |
1024 | $snippet = array(); | |
1025 | $request_uri = $_SERVER['REQUEST_URI']; | |
1026 | ||
1027 | foreach ( $this->multilingual_code as $key => $load_lang ){ | |
1028 | $snippet[$key]['name'] = $this->format_code_lang( $key );// == 'ja' ? '日本' : strtoupper($key); | |
1029 | $snippet[$key]['url'] = $this->get_multilingual_request_uri($request_uri, $key ); | |
1030 | $snippet[$key]['current'] = $key == $lang ? ' current' : ''; | |
1031 | } | |
1032 | return $snippet; | |
1033 | } | |
1034 | ||
1035 | /** | |
1036 | * ファンクション名:get_multilingual_request_uri | |
1037 | * 機能概要:多言語のリクエストのURLを作成 | |
1038 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
1039 | * 変更: | |
1040 | * @param string $url URL | |
1041 | * @param string $lang 言語コード | |
1042 | * @return url 再設定URL | |
1043 | */ | |
1044 | function get_multilingual_request_uri($url , $lang ){ | |
1045 | ||
1046 | if ( preg_match( '|\?lang='. $lang .'|' , $url) || preg_match( '|&lang='. $lang .'|' , $url ) ){ | |
1047 | return $url; | |
1048 | }elseif( preg_match( '|\?lang=[\w]{2}|' , $url) ){ | |
1049 | return preg_replace('|(\?)lang=([\w]{2})|' , "$1lang=" . $lang , $url); | |
1050 | }elseif( preg_match( '|&lang=[\w]{2}|' , $url) ){ | |
1051 | return preg_replace('|(&)lang=([\w]{2})|' , "$1lang=" . $lang , $url); | |
1052 | }else{ | |
1053 | if ( preg_match('|\?[\w]+=|', $url, $m )){ | |
1054 | return $url . '&lang=' . $lang; | |
1055 | }else{ | |
1056 | return $url . '?lang=' . $lang; | |
1057 | } | |
1058 | } | |
1059 | } | |
1060 | ||
1061 | /** | |
1062 | * ファンクション名: | |
1063 | * 機能概要: | |
1064 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
1065 | * 作成: | |
1066 | * 変更: | |
1067 | * @param resource | |
1068 | * @param int | |
1069 | * @param string | |
1070 | * @return | |
1071 | */ | |
1072 | function format_code_lang( $code = '' ) { | |
1073 | $code = strtolower( substr( $code, 0, 2 ) ); | |
1074 | $lang_codes = array( | |
1075 | 'aa' => 'Afar', 'ab' => 'Abkhazian', 'af' => 'Afrikaans', 'ak' => 'Akan', 'sq' => 'Albanian', 'am' => 'Amharic', 'ar' => 'Arabic', 'an' => 'Aragonese', 'hy' => 'Armenian', 'as' => 'Assamese', 'av' => 'Avaric', 'ae' => 'Avestan', 'ay' => 'Aymara', 'az' => 'Azerbaijani', 'ba' => 'Bashkir', 'bm' => 'Bambara', 'eu' => 'Basque', 'be' => 'Belarusian', 'bn' => 'Bengali', | |
1076 | 'bh' => 'Bihari', 'bi' => 'Bislama', 'bs' => 'Bosnian', 'br' => 'Breton', 'bg' => 'Bulgarian', 'my' => 'Burmese', 'ca' => 'Catalan; Valencian', 'ch' => 'Chamorro', 'ce' => 'Chechen', 'zh' => 'Chinese', 'cu' => 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic', 'cv' => 'Chuvash', 'kw' => 'Cornish', 'co' => 'Corsican', 'cr' => 'Cree', | |
1077 | 'cs' => 'Czech', 'da' => 'Danish', 'dv' => 'Divehi; Dhivehi; Maldivian', 'nl' => 'Dutch; Flemish', 'dz' => 'Dzongkha', 'en' => 'English', 'eo' => 'Esperanto', 'et' => 'Estonian', 'ee' => 'Ewe', 'fo' => 'Faroese', 'fj' => 'Fijjian', 'fi' => 'Finnish', 'fr' => 'French', 'fy' => 'Western Frisian', 'ff' => 'Fulah', 'ka' => 'Georgian', 'de' => 'German', 'gd' => 'Gaelic; Scottish Gaelic', | |
1078 | 'ga' => 'Irish', 'gl' => 'Galician', 'gv' => 'Manx', 'el' => 'Greek, Modern', 'gn' => 'Guarani', 'gu' => 'Gujarati', 'ht' => 'Haitian; Haitian Creole', 'ha' => 'Hausa', 'he' => 'Hebrew', 'hz' => 'Herero', 'hi' => 'Hindi', 'ho' => 'Hiri Motu', 'hu' => 'Hungarian', 'ig' => 'Igbo', 'is' => 'Icelandic', 'io' => 'Ido', 'ii' => 'Sichuan Yi', 'iu' => 'Inuktitut', 'ie' => 'Interlingue', | |
1079 | 'ia' => 'Interlingua (International Auxiliary Language Association)', 'id' => 'Indonesian', 'ik' => 'Inupiaq', 'it' => 'Italian', 'jv' => 'Javanese', 'ja' => 'Japanese', 'kl' => 'Kalaallisut; Greenlandic', 'kn' => 'Kannada', 'ks' => 'Kashmiri', 'kr' => 'Kanuri', 'kk' => 'Kazakh', 'km' => 'Central Khmer', 'ki' => 'Kikuyu; Gikuyu', 'rw' => 'Kinyarwanda', 'ky' => 'Kirghiz; Kyrgyz', | |
1080 | 'kv' => 'Komi', 'kg' => 'Kongo', 'ko' => 'Korean', 'kj' => 'Kuanyama; Kwanyama', 'ku' => 'Kurdish', 'lo' => 'Lao', 'la' => 'Latin', 'lv' => 'Latvian', 'li' => 'Limburgan; Limburger; Limburgish', 'ln' => 'Lingala', 'lt' => 'Lithuanian', 'lb' => 'Luxembourgish; Letzeburgesch', 'lu' => 'Luba-Katanga', 'lg' => 'Ganda', 'mk' => 'Macedonian', 'mh' => 'Marshallese', 'ml' => 'Malayalam', | |
1081 | 'mi' => 'Maori', 'mr' => 'Marathi', 'ms' => 'Malay', 'mg' => 'Malagasy', 'mt' => 'Maltese', 'mo' => 'Moldavian', 'mn' => 'Mongolian', 'na' => 'Nauru', 'nv' => 'Navajo; Navaho', 'nr' => 'Ndebele, South; South Ndebele', 'nd' => 'Ndebele, North; North Ndebele', 'ng' => 'Ndonga', 'ne' => 'Nepali', 'nn' => 'Norwegian Nynorsk; Nynorsk, Norwegian', 'nb' => 'Bokmål, Norwegian, Norwegian Bokmål', | |
1082 | 'no' => 'Norwegian', 'ny' => 'Chichewa; Chewa; Nyanja', 'oc' => 'Occitan, Provençal', 'oj' => 'Ojibwa', 'or' => 'Oriya', 'om' => 'Oromo', 'os' => 'Ossetian; Ossetic', 'pa' => 'Panjabi; Punjabi', 'fa' => 'Persian', 'pi' => 'Pali', 'pl' => 'Polish', 'pt' => 'Portuguese', 'ps' => 'Pushto', 'qu' => 'Quechua', 'rm' => 'Romansh', 'ro' => 'Romanian', 'rn' => 'Rundi', 'ru' => 'Russian', | |
1083 | 'sg' => 'Sango', 'sa' => 'Sanskrit', 'sr' => 'Serbian', 'hr' => 'Croatian', 'si' => 'Sinhala; Sinhalese', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'se' => 'Northern Sami', 'sm' => 'Samoan', 'sn' => 'Shona', 'sd' => 'Sindhi', 'so' => 'Somali', 'st' => 'Sotho, Southern', 'es' => 'Spanish; Castilian', 'sc' => 'Sardinian', 'ss' => 'Swati', 'su' => 'Sundanese', 'sw' => 'Swahili', | |
1084 | 'sv' => 'Swedish', 'ty' => 'Tahitian', 'ta' => 'Tamil', 'tt' => 'Tatar', 'te' => 'Telugu', 'tg' => 'Tajik', 'tl' => 'Tagalog', 'th' => 'Thai', 'bo' => 'Tibetan', 'ti' => 'Tigrinya', 'to' => 'Tonga (Tonga Islands)', 'tn' => 'Tswana', 'ts' => 'Tsonga', 'tk' => 'Turkmen', 'tr' => 'Turkish', 'tw' => 'Twi', 'ug' => 'Uighur; Uyghur', 'uk' => 'Ukrainian', 'ur' => 'Urdu', 'uz' => 'Uzbek', | |
1085 | 've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapük', 'cy' => 'Welsh','wa' => 'Walloon','wo' => 'Wolof', 'xh' => 'Xhosa', 'yi' => 'Yiddish', 'yo' => 'Yoruba', 'za' => 'Zhuang; Chuang', 'zu' => 'Zulu' ); | |
1086 | $lang_codes = apply_filters( 'format_code_lang', $lang_codes, $code ); | |
1087 | return strtr( $code, $lang_codes ); | |
1088 | } | |
1089 | ||
1090 | /** | |
1091 | * ファンクション名:custom_taxonomy_admin_notices | |
1092 | * 機能概要:設定ファイルなし、警告メッセージ | |
1093 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
1094 | * 変更: | |
1095 | */ | |
1096 | function custom_taxonomy_admin_notices(){ | |
1097 | echo '<div class="error" style="text-align: center;"><p style="color: red; font-size: 14px; font-weight: bold;">プラグイン012 PS Multi Languages :設定ファイル<strong>_config.php</strong>の名前を<strong>config.php OR config-{$blog_id}.php</strong>に変更し、<strong>configファイル</strong>の設定を行ってください。</p></div>'; | |
1098 | } | |
1099 | ||
1100 | /** | |
1101 | * ファンクション名:admin_notices_multilingual | |
1102 | * 機能概要:設定ファイルあり、$ultilingualがない場合警告メッセージ | |
1103 | * 作成:プライム・ストラテジー株式会社 王 濱 | |
1104 | * 変更: | |
1105 | */ | |
1106 | function admin_notices_multilingual(){ | |
1107 | echo '<div class="error" style="text-align: center;"><p style="color: red; font-size: 14px; font-weight: bold;">プラグイン012 PS Multi Languages:設定ファイル<strong>config.php OR config-{$blog_id}.php</strong>の多国語設定配列($multilingual)の設定を行ってください。</p></div>'; | |
1108 | } | |
1109 | ||
1110 | /** | |
1111 | * ファンクション名:get_bread_crumb_array | |
1112 | * 機能概要:パンくずナビのデータを作成 | |
1113 | * 作成: | |
1114 | * 変更: | |
1115 | * @param void | |
1116 | * @return Array $bread_crumb_arr | |
1117 | */ | |
1118 | function get_bread_crumb_array() { | |
1119 | global $post,$term , $wp_post_types , $blog_id , $all_post_type , $wp_query ; | |
1120 | ||
1121 | $bread_crumb_arr = array(); | |
1122 | ||
1123 | $multilingual = $this->get_load_lang( ); | |
1124 | ||
1125 | $default_ml = $this->WPLANGKEY; | |
1126 | ||
1127 | // if ( $multilingual == $default_ml ){ | |
1128 | ||
1129 | if ( is_multisite() && false ){ | |
1130 | $site=get_blog_details($blog_id); | |
1131 | $site_url = get_bloginfo( 'url' ); | |
1132 | $bread_crumb_arr[] = array( 'title' => 'Top Home' , 'link' => '/' ); | |
1133 | $bread_crumb_arr[] = array( 'title' => $site->blogname , 'link' => $site_url . '/' ); | |
1134 | }else{ | |
1135 | $front_page_id = get_option( 'page_on_front' ); | |
1136 | ||
1137 | if ( $front_page_id > 0 ){ | |
1138 | $front_page = get_page( $front_page_id ); | |
1139 | if ( $multilingual == $default_ml ){ | |
1140 | $front_page_title = $front_page->post_title; | |
1141 | }else{ | |
1142 | $front_page_title = get_post_meta( $front_page_id , 'post_title_' . $multilingual , true); | |
1143 | if ( !$front_page_title ){ | |
1144 | $front_page_title = $front_page->post_title; | |
1145 | } | |
1146 | } | |
1147 | }else{ | |
1148 | $front_page_title = 'Home'; | |
1149 | } | |
1150 | $bread_crumb_arr[] = array( 'title' => $front_page_title , 'link' => '/' ); | |
1151 | } | |
1152 | ||
1153 | ||
1154 | if ( is_404() ) { | |
1155 | $bread_crumb_arr[] = array( 'title' => 'No results found.' , 'link' => false ); | |
1156 | } elseif ( is_search() || ( isset( $_GET['s'] ) && $_GET['s'] == false )) { | |
1157 | $search_results = $this->search_multilingual_title[$multilingual]; | |
1158 | if ( $search_results ){ | |
1159 | $bread_crumb_arr[] = array( 'title' => sprintf( $search_results . ' “%s”' , $_GET['s'] ), 'link' => false ); | |
1160 | }else{ | |
1161 | $bread_crumb_arr[] = array( 'title' => sprintf( __('Search results for “%s”') , $_GET['s'] ), 'link' => false ); | |
1162 | } | |
1163 | } elseif ( is_tax() ) {//oh start 2011/08/04 | |
1164 | //カスタム投稿タイプを取得する | |
1165 | //$post_type = get_post_type(); | |
1166 | //クエリからtaxonomy(カスタム分類タクソノミー)のslug取 | |
1167 | $taxonomy = get_query_var( 'taxonomy' ); | |
1168 | ||
1169 | //termの情報を取得 | |
1170 | $term_object = get_term_by( 'slug', get_query_var( 'term' ), $taxonomy ); | |
1171 | ||
1172 | if ( is_taxonomy_hierarchical( $taxonomy ) && $term_object->parent != 0 ) { | |
1173 | $ancestors = array_reverse( get_ancestors( $term_object->term_id, $taxonomy ) ); | |
1174 | foreach ( $ancestors as $ancestor_id ) { | |
1175 | $ancestor = get_term( $ancestor_id, $taxonomy ); | |
1176 | $bread_crumb_arr[] = array( 'title' => $ancestor->name, 'link' => get_term_link( $ancestor, $term) ); | |
1177 | } | |
1178 | } | |
1179 | $bread_crumb_arr[] = array( 'title' => $term_object->name , 'link' => get_term_link( $term_object, $term ) ); | |
1180 | ||
1181 | } elseif ( is_home() || is_front_page() ) { | |
1182 | } elseif ( is_attachment() ) { | |
1183 | if ( $post->post_parent ) { | |
1184 | if ( $parent_post = get_post( $post->post_parent ) ) { | |
1185 | if ( $multilingual == $default_ml ){ | |
1186 | $parent_post_title = $parent_post->post_title; | |
1187 | }else{ | |
1188 | $parent_post_title = get_post_meta( $parent_post->ID , 'post_title_' . $multilingual , true); | |
1189 | if ( !$front_page_title ){ | |
1190 | $parent_post_title = $parent_post->post_title; | |
1191 | } | |
1192 | } | |
1193 | } | |
1194 | $bread_crumb_arr[] = array( 'title' => $parent_post->post_title, 'link' => get_permalink( $parent_post->ID ) ); | |
1195 | } | |
1196 | $bread_crumb_arr[] = array( 'title' => $post->post_name, 'link' => get_permalink( $post->ID ) ); | |
1197 | ||
1198 | } elseif ( is_single() ) { | |
1199 | ||
1200 | //カスタム投稿タイプを取得する | |
1201 | $post_type = get_post_type(); | |
1202 | ||
1203 | $taxonomy = get_query_var( 'taxonomy' ); | |
1204 | ||
1205 | //$taxonomy = ( in_array($post->post_type,array('post','attachment')) ? 'category':$post->post_type . '-category'); | |
1206 | $post_term = get_the_terms($post->ID,$taxonomy); | |
1207 | ||
1208 | $post_type_taxonomies = get_object_taxonomies( $post_type, false ); | |
1209 | ||
1210 | if ( is_array( $post_type_taxonomies ) && count( $post_type_taxonomies ) ) { | |
1211 | foreach( $post_type_taxonomies as $tax_slug => $taxonomy ) { | |
1212 | if ( $taxonomy->hierarchical ) { | |
1213 | $terms = get_the_terms( $post->ID, $tax_slug ); | |
1214 | if ( $terms ) { | |
1215 | $post_term = array_shift( $terms ); | |
1216 | $taxonomy = $post_term->taxonomy; | |
1217 | break; | |
1218 | } | |
1219 | } | |
1220 | } | |
1221 | } | |
1222 | ||
1223 | if ( !$post_term || is_wp_error($post_term)){ | |
1224 | $default_category = get_option( $post_type . '_default_category'); | |
1225 | $post_term = get_term( $default_category , $taxonomy); | |
1226 | } | |
1227 | ||
1228 | if ( is_taxonomy_hierarchical( $taxonomy ) && $post_term->parent != 0 ) { | |
1229 | $ancestors = array_reverse( get_ancestors( $post_term->term_id, $taxonomy ) ); | |
1230 | foreach ( $ancestors as $ancestor_id ) { | |
1231 | $ancestor = get_term( $ancestor_id, $taxonomy ); | |
1232 | ||
1233 | if (!in_array($post->post_type,array('post','attachment'))){ | |
1234 | $bread_crumb_arr[] = array( 'title' => $ancestor->name , 'link' => get_term_link( $ancestor, $post_term->slug ) ); | |
1235 | }else{ | |
1236 | $bread_crumb_arr[] = array( 'title' => $ancestor->name , 'link' => get_term_link( $ancestor, $post_term->slug ) ); | |
1237 | } | |
1238 | } | |
1239 | } | |
1240 | ||
1241 | if ( $post_term && !$post_term->errors){ | |
1242 | $bread_crumb_arr[] = array( 'title' => $post_term->name, 'link' => get_term_link( $post_term, $post_term->slug )); | |
1243 | } | |
1244 | ||
1245 | if ( $multilingual != $default_ml ){ | |
1246 | $multi_lang_Name = get_post_meta( $post->ID, 'post_title_' . $multilingual , true); | |
1247 | $post->post_title = $multi_lang_Name ? $multi_lang_Name : $post->post_title; | |
1248 | } | |
1249 | ||
1250 | $bread_crumb_arr[] = array( 'title' => $post->post_title , 'link' => get_permalink( $post->ID ) ); | |
1251 | ||
1252 | } elseif ( is_page() ) { | |
1253 | $ancestors = array_reverse(get_post_ancestors( $post ) ); | |
1254 | $ancestor_posts = get_posts( 'post_type=page&include=' . implode( ',', $ancestors ) ); | |
1255 | foreach( $ancestors as $ancestor ) { | |
1256 | foreach ( $ancestor_posts as $ancestor_post ) { | |
1257 | if ( $ancestor == $ancestor_post->ID ) { | |
1258 | if ( $multilingual != $default_ml ){ | |
1259 | $multi_lang_Name = get_post_meta( $ancestor_post->ID, 'post_title_' . $multilingual , true); | |
1260 | $ancestor_post->post_title = $multi_lang_Name ? $multi_lang_Name : $ancestor_post->post_title; | |
1261 | } | |
1262 | $bread_crumb_arr[] = array( 'title' => $ancestor_post->post_title , 'link' => get_permalink( $ancestor_post->ID ) ); | |
1263 | } | |
1264 | } | |
1265 | } | |
1266 | $bread_crumb_arr[] = array( 'title' => $post->post_title , 'link' => get_permalink( $post->ID ) ); | |
1267 | ||
1268 | } elseif ( is_category() ) { | |
1269 | global $cat; | |
1270 | ||
1271 | $category = get_category( $cat ); | |
1272 | ||
1273 | if ( $category->parent != 0 ) { | |
1274 | $ancestors = array_reverse( $this->get_category_ancestors( $category->parent ) ); | |
1275 | foreach ( $ancestors as $ancestor ) { | |
1276 | $bread_crumb_arr[] = array( 'title' => $ancestor->name , 'link' => get_category_link( $ancestor->term_id ) ); | |
1277 | } | |
1278 | } | |
1279 | $bread_crumb_arr[] = array( 'title' => $category->name , 'link' => get_category_link( $cat ) ); | |
1280 | } elseif ( is_tag() ) { | |
1281 | global $tag_id; | |
1282 | $tag = get_tag( $tag_id ); | |
1283 | $bread_crumb_arr[] = array( 'title' => $tag->name , 'link' => get_tag_link( $tag_id ) ); | |
1284 | } elseif ( is_author() ) { | |
1285 | global $author; | |
1286 | $bread_crumb_arr[] = array( 'title' => get_author_name( $author ), 'link' => get_author_posts_url( $author ) ); | |
1287 | } elseif ( is_day() ) { | |
1288 | $year = get_query_var( 'year' ); | |
1289 | $month = get_query_var( 'monthnum' ); | |
1290 | $day = get_query_var( 'day' ); | |
1291 | $bread_crumb_arr[] = array( 'title' => $year , 'link' => get_year_link( $year ) ); | |
1292 | $bread_crumb_arr[] = array( 'title' => $month , 'link' => get_month_link( $year, $month ) ); | |
1293 | $bread_crumb_arr[] = array( 'title' => $day , 'link' => get_day_link( $year, $month, $day ) ); | |
1294 | } elseif ( is_month() ) { | |
1295 | $year = get_query_var( 'year' ); | |
1296 | $month = get_query_var( 'monthnum' ); | |
1297 | $bread_crumb_arr[] = array( 'title' => $year , 'link' => get_year_link( $year ) ); | |
1298 | $bread_crumb_arr[] = array( 'title' => $month , 'link' => get_month_link( $year, $month ) ); | |
1299 | } elseif ( is_year() ) { | |
1300 | $year = get_query_var( 'year' ); | |
1301 | $bread_crumb_arr[] = array( 'title' => $year , 'link' => get_year_link( $year ) ); | |
1302 | } | |
1303 | return $bread_crumb_arr; | |
1304 | } | |
1305 | ||
1306 | /** | |
1307 | * ファンクション名:get_bread_crumb_array | |
1308 | * 機能概要:パンくずナビのデータを作成 | |
1309 | * 作成: | |
1310 | * 変更: | |
1311 | * @param void | |
1312 | * @return Array $bread_crumb_arr | |
1313 | */ | |
1314 | function bread_crumb( $type = 'list', $echo = false ) { | |
1315 | ||
1316 | $bread_crumb_arr = $this->get_bread_crumb_array(); | |
1317 | ||
1318 | if ( $type == 'string' ) { | |
1319 | $output = array(); | |
1320 | $cnt = 1; | |
1321 | foreach ( $bread_crumb_arr as $ancestor ) { | |
1322 | if ( $cnt == count( $bread_crumb ) ) { | |
1323 | $output[] = '<strong>' . apply_filters( 'the_title', $ancestor['title'] ) . '</strong>'; | |
1324 | } else { | |
1325 | $output[] = '<a href="' . $ancestor['link'] . '">' . apply_filters( 'the_title', $ancestor['title'] ) . '</a>'; | |
1326 | } | |
1327 | $cnt++; | |
1328 | } | |
1329 | $output = implode( esc_html( $this->settings['disp']['bc_joint_string'] ), $output ); | |
1330 | } else { | |
1331 | $output = '<ul id="bread_crumb">' . "\n"; | |
1332 | $cnt = 1; | |
1333 | foreach ( $bread_crumb_arr as $ancestor ) { | |
1334 | $classes = array(); | |
1335 | $classes[] = 'bc_level-' . $cnt; | |
1336 | if ( $cnt == 1 ) { | |
1337 | $classes[] = 'bc_top'; | |
1338 | } else { | |
1339 | $classes[] = 'bc_sub'; | |
1340 | } | |
1341 | if ( $cnt == count( $bread_crumb_arr ) ) { | |
1342 | $classes[] = 'tail'; | |
1343 | $output .= ' <li class="' . implode( ' ', $classes ) . '">' . apply_filters( 'the_title', $ancestor['title'] ) . '</li>' . "\n"; | |
1344 | } elseif( $ancestor['no_link'] === true ){ | |
1345 | $output .= ' <li class="' . implode( ' ', $classes ) . '">' . apply_filters( 'the_title', $ancestor['title'] ) . '</li>' . "\n"; | |
1346 | } else { | |
1347 | $output .= ' <li class="' . implode( ' ', $classes ) . '"><a href="' . $ancestor['link'] . '" '. $ancestor['target'] .'>' . apply_filters( 'the_title', $ancestor['title'] ) . '</a></li>' . "\n"; | |
1348 | } | |
1349 | $cnt++; | |
1350 | } | |
1351 | $output .= '</ul>' . "\n"; | |
1352 | } | |
1353 | ||
1354 | if ( $echo ) { | |
1355 | echo $output; | |
1356 | } else { | |
1357 | return $output; | |
1358 | } | |
1359 | } | |
1360 | ||
1361 | function get_category_ancestors( $cat_id, $ancestors = array() ) { | |
1362 | $cat = get_category( $cat_id ); | |
1363 | $ancestors[] = $cat; | |
1364 | if ( $cat->parent != 0 ) { | |
1365 | $ancestors = $this->get_category_ancestors( $cat->parent, $ancestors ); | |
1366 | } | |
1367 | return $ancestors; | |
1368 | } | |
1369 | ||
1370 | }//class end | |
1371 | ||
1372 | $ps_multi_languages = new ps_multi_languages( ); | |
1373 | ||
1374 | if ( isset($ps_multi_languages ) ){ | |
1375 | include_once ( MULTI_LANGUAGES_DIR . '/config/functions.php' ); | |
1376 | } | |
1377 | ?> |