LVP8
フォーラムへの返信
-
・小数点は「.」「,」の場合があるなあ。アジアは一緒?
・今は円安だから、将来の円高に備えて現地通貨表示の価格は割高に設定してお…
・連想配列は、通貨コード => レート だけど、通貨記号や国名(英語、日本語)もあった方が便利かな?( [HKD] => Array ( [rate] => 15.966032704049 [mark] => HK$ [name] => Hong Kong [jpname] => 香港 )
実際のWEBページ上での表示方法は分かりませんが、こんなことを想像しながら書いてました。
現地通貨への換算は、 日本円価格÷現地通貨/円 で計算できます。
例)香港の人に日本円で5,000円の商品を売りたい場合
1香港ドル=15.95円とする
5,000円÷15.95円 = HKD 313.479624なので、ECB から提供されているレートを、対円でのレートに変換して保存しておくと便利だと思います。
続きあり…
続き
// ECB の xml ファイルを読み込み配列に格納 // cronで定時実行なので、XMLファイルを保存する過程は必要ないかと… $XML=simplexml_load_file( 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml' ); $eur_rate = array(); // 必要な情報だけにする foreach( $XML->Cube->Cube->Cube as $rate ) { $eur_rate[current( $rate['currency'] )] = current( $rate['rate'] ); } // ユーロベースレートの連想配列 // print_r( $eur_rate ); // ユーロベースのレートから円ベースのレートに置き換え $eurjpy = $eur_rate['JPY']; foreach( $eur_rate as $currency=>$rate ) { // JPY となっている部分は EUR に置き換える if ( 'JPY' === $currency ) { $jpy_rate['EUR'] = $rate; } else { $jpy_rate[$currency] = $eurjpy / $rate; } } // 円ベースレートの連想配列 // print_r( $jpy_rate );
続きあり…
続きこの連想配列を、WPのデータベース options に保存(そのまま? or 通貨ペアごとに分けて?)
// 関数で書いていますが、ショートコードでの応用に function local_price( $jpyprice, $currency ) { // 円ベースレートの読み込み // データベースに入れたのなら get_option() などで global $jpy_rate; $jpy_rate = $jpy_rate; $local_price = $jpyprice / $jpy_rate[$currency]; $local_price = number_format( $local_price, 2 ); // 小数第二位までに丸める(必要に応じて調整) return '日本円で' . number_format( $jpyprice ) . '円の商品は、' . $currency . $local_price . ' です。'; } // echo local_price( 5000, 'HKD' ); // 日本円で5,000円の商品は、HKD313.12 です。
続きあり…
為替レートのAPIは、国内外問わず結構いろいろなところで提供されていますが、個人での提供(サービスがすぐ終わる可能性)や、商用利用不可、APIキーを取得する必要があるなど、使い勝手が悪かったりします。
なので、私が以前利用していたのは、ECB(欧州中央銀行)の xml ファイルです。
http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.htmlアジア・アフリカ通貨は、人民元、ウォン、シンガポールドル、フィリピンペソ、マレーシアリンギット、タイバーツ、南アフリカランド があります。
注意点としては…
・更新頻度が高くない(1日1回、日本時間の午前7時頃に更新される)ので、為替レートの変動が大きい日だと、実勢レートとの乖離が大きくなる場合がある。
・対ユーロでのレートである(1ユーロがいくらか。対円レートに再計算する必要)
例1)ドル円
ユーロ円÷ユーロドル例2)シンガポールドル円
ユーロ円÷ユーロシンガポールドルワードプレスでの表示
xmlファイルの取得後(a.都度アクセスするのか、b.自サーバーにxmlファイル保存するのか、c.対円レートに再計算後データベースに格納するのか)、ショートコードを使って表示、という流れがいいのではと思います。フォーラム: 使い方全般
返信が含まれるトピック: 同じパーマリンク名でURLを生成したいアクセスされたURL によって、条件分岐で表示内容を変えてあげればいいのでは?
色々調整は必要ですが。。。if ( /apple/ranking.html を表示しているとき ) { apple のランキング } elseif ( /windows/ranking.html を表示しているとき ) { windows のランキング } else { 通常のシングルページ(?)の表示 }
フォーラム: 使い方全般
返信が含まれるトピック: 投稿(post)だけパーマリンクを変更したい。こんばんは。カスタム投稿を追加する関数 register_post_type() のパラメータ rewite の中で、 ‘with_front’ => false を加えれば blog は付かなくなります。
'rewrite' => array( 'with_front' => false )
functions.php でカスタム投稿を設定する場合の例です。custom post type permalinks は利用経験がないので、その設定ができるかはわかりません。
フォーラム: 使い方全般
返信が含まれるトピック: is_home()がうまく動かない時の対処こんにちは。
okayosさんが、WPの管理者であるという前提で。footer.phpの最後(</body>の直前あたり)に
<?php if ( current_user_can( 'level_10' ) ) { echo '<pre>'; print_r($wp_query); echo '</pre>'; } ?>
ログイン後に、表示してあるページのオブジェクトを参照できます。
その中の最後の方に、~~~省略~~~
[is_single] =>
[is_preview] =>
[is_page] =>
[is_archive] =>
[is_date] =>
[is_year] =>
[is_month] =>
[is_day] =>
[is_time] =>
[is_author] =>
[is_category] =>
[is_tag] =>
[is_tax] =>
[is_search] =>
[is_feed] =>
[is_comment_feed] =>
[is_trackback] =>
[is_home] => 1
[is_404] =>
[is_comments_popup] =>
[is_paged] =>
[is_admin] =>
[is_attachment] =>
[is_singular] =>
[is_robots] =>
[is_posts_page] =>
[is_post_type_archive] =>
~~~省略~~~という箇所があると思います。
is_home() の返り値が true の場合、 [is_home] => 1 となっており、false の場合は値がありません。フォーラム: 使い方全般
返信が含まれるトピック: wp-login.phpでaction=lostpasswordのリンクを置き換えたいこんにちは。
「新しいパスワードを取得」フォームのPOST先を変更、という条件のみでしたら下記のコードでどうでしょう。functions.php へ
add_action( 'lost_password', 'form_action_change_ob_start' ); function form_action_change_ob_start() { ob_start(); } // 'wp-login.php' を 'hogehoge-login.php' に書き換え add_action( 'lostpassword_form', 'form_action_change' ); function form_action_change() { $form = ob_get_contents(); ob_end_clean(); $form = str_replace( 'wp-login.php', 'hogehoge-login.php', $form); echo $form; }
ただし、このままですと フォーム下部の「ログイン」のリンクは、http://example.com/wp-login.php のままです。
もしこのリンクも書き換えたいのであれば、二つ目の関数を下記のようにすればよいかと思います。
add_action( 'login_footer', 'form_action_change' ); function form_action_change() { if ( ! filter_input(INPUT_GET, 'action') ) { return false; } if ( 'lostpassword' !== $_GET['action'] ) { return false; } $form = ob_get_contents(); ob_end_clean(); $form = str_replace( 'wp-login.php', 'hogehoge-login.php', $form); echo $form; }
関数名は格好いいのに替えてください。。。
フォーラム: 使い方全般
返信が含まれるトピック: カスタム投稿タイプのアーカイブで0件の場合get_post_type()が取得できないカスタム投稿タイプのアーカイブページの場合は、is_post_type_archive で良いかと。
<?php if( is_post_type_archive( 'schedule' ) ) : ?> <link href="css/schedule.css" rel="stylesheet" type="text/css" /> <?php endif; ?>
フォーラム: 使い方全般
返信が含まれるトピック: wp_commentmetaの投稿との関連付け手遅れでなければ、commentmeta の meta_key の名前に、投稿IDを含ませる、例えば、現在 “poll” という meta_key で登録しているのなら、 “poll_136” みたいにするのも方法の一つかとおもいます。
登録時の例
update_coment_meta( $comment_id, 'poll_' . $comment_post_ID, $meta_value );
呼び出し時の例
get_comment_meta($comment_id, 'poll_' . $comment_post_ID, true)
フォーラム: 使い方全般
返信が含まれるトピック: get_the_termsで取得した値の一部を抜き出して配列にまとめたいwp_get_object_terms を使えば、第3引数で、取得するフィールド(など)を指定できます。
フォーラム: 使い方全般
返信が含まれるトピック: 固定ページの現在いる階層別の記事固定ページA2★(第3階層目のサブページを持っている場合)にも
第3階層の記事一覧を表示したいおー、質問をよく読んでいませんでした…。
functions.php へ
function subpage_checke() { global $post, $wpdb; // 親ページを持っているかチェック if ( !is_page() || !$post->post_parent ) return false; // 第3階層のチェック(親ページが親ページを持っているか) $parent = $wpdb->get_var($wpdb->prepare(" SELECT post_parent FROM $wpdb->posts WHERE ID = %d", $post->post_parent )); if ( $parent ) return 3; // 第2階層の場合は子ページを持っているかチェック $child = $wpdb->get_var($wpdb->prepare(" SELECT ID FROM $wpdb->posts WHERE post_parent = %d", $post->ID )); if ( $child ) return 2; return false; };
条件分岐
// 第2階層で子ページ有り、または第3階層 if ( subpage_checke() ) // ← nobugot さんの要望はこれかと /* 以下、念のため */ // 第2階層で子ページ有り if ( 2 == subpage_checke() ) // 第3階層ページ if ( 3 == subpage_checke() )
- 応用の効かない(第4階層への対応など)コードなので、判定基準の変化があった時は見直してください。
- 思い通りの挙動だったとしても、冗長であたっり別の簡単な方法があるかもしれないので、しばらく解決済みにせず、他の方のコメントを待ってください。
フォーラム: 使い方全般
返信が含まれるトピック: 固定ページの現在いる階層別の記事is_subpage を利用して条件分岐
codex に載っているサンプルコードのような形でチェックしたい場合は、親ページがあったらその親ページがあるかチェックする、という作業を追加すればいいと思います。
functions.php へ
function is_nobugot_special_subpage_checke() { global $post; // 親ページをもっているかチェック if ( !is_page() || !$post->post_parent ) return false; // 親ページが親ページをもっているかチェック $parent = get_post( $parent_id = $post->post_parent ); if ( $parent->post_parent ) return 3; // 持っている(第3階層:孫ページ) else return 2; // 持っていない(第2階層:子ページ) };
条件分岐
if ( is_nobugot_special_subpage_checke() ) { // 子ページ及び孫ページ } if ( 2 == is_nobugot_special_subpage_checke() ) { // 子(第2階層)ページ } if ( 3 == is_nobugot_special_subpage_checke() ) { // 孫(第3階層)ページ }
- get_post を使うのでデータベースへの問い合わせが行われる分、わずかながらコスト増(負荷)が考えられます。(気にする程でもないですが)
- 第4階層以上には対応していません。
- 関数名は格好良いのに変えてください。
フォーラム: 使い方全般
返信が含まれるトピック: 固定ページの現在いる階層別の記事php の関数 explode() でURL を ‘/’ で分割することができます。
<?php // 例えば、 http://example.jp/A/A1/ というURL のページにいる場合 $segurl = explode('/', $_SERVER['REQUEST_URI']); /* $exurl の中身(配列) Array ( [0] => [1] => A [2] => A1 [3] => // 末尾のスラッシュを省いたURL設定の場合ここには値がセットされない ) */ // サブページの判定 if ( !empty($segurl[2]) ) { } // サブページかつ第三階層目の判定 if ( !empty($segurl[3]) ) { } ?>
URL の最後にスラッシュを付けているか否かで結果が若干違ってくるので、対象ページで、
print_r(explode('/', $_SERVER['REQUEST_URI']));
として返り値を確認し、nobugot さんの環境に合わせて条件分岐を調整する必要があるかもしれません。*もっと簡単な方法があるかも… 他のWPマスターの回答を待ってくださいね。
フォーラム: 使い方全般
返信が含まれるトピック: ショートコード内に変数を展開したい。[Easy Timer]echo do_shortcode('[countdown date={$settime}]'.
の部分を
echo do_shortcode('[countdown date='.$settime.']'.
でどうですか?フォーラム: 使い方全般
返信が含まれるトピック: プレビュー画面で公開ボタンtuyoshiさん
少し気になるコードです。テーブルの接頭辞はユーザーによって違いますし、このコードを試される方もいるかもしれません。
なので、解決済みのところ恐縮ですが、せっかくWordPress を利用しているのですから、wp_update_post あたりを参考に、もう少し安全でWPチックな方法にされた方がいいかと思います。