PayPal.Meは客もアカウント作らないと決済できないから不便
Webサイトでデータを販売したくて、クレジットカードだけで決済できる簡単なサービスがないものかと、いろいろ調べてた。
「PayPal.Me」というのが、すぐに導入できそうな感がしてよかったんだけど、でもやっぱりこれは不便・・。
PayPal.Meで決済するためには、自分もPaypalのアカウントを持ってないといけないし、お客さんもPaypalのアカウントを持ってないといけない・・。
「簡単ワンタッチ決済!」みたいに持ち上げてる記事がいっぱいあるけど、それはお互いPaypalアカウントを持っている場合だけ。
お互い同じサービスの加入者なんだから、簡単に決済できるのは当たり前ですわな・・。
お客になにも加入させずに、クレカを入力するだけで決済できたら、かなり革命的なサービスになりそうなんだけど、残念。
「wpdb->prepare」のプレースホルダの引数を動的にセットする!
ワードプレスでDBの検索をするときに、「wpdb->prepare()」というのを使ってSQL構文を準備しますよね。
↓こんな感じで使うやつです。
global $wpdb; $prepared = $wpdb->prepare( 'SELECT * FROM wp_post WHERE post_type = %s AND post_status = %s AND post_author = %d', 'post', 'publish', 1); $result = $wpdb->get_results($prepared);
上記は3つの値「post」「publish」「1」を、検索条件のプレースホルダとして渡しています。
このプレースホルダを動的に複数個設定したいときがあります。
ユーザーが自由に検索条件などをセットするときなどに、こういうのが必要になるんですね。
↓下記のようにすると、検索条件のプレースホルダを自由に追加していくこと出来ます。
global $wpdb; $args = array(); $sql = "SELECT * FROM wp_post WHERE post_type = %s"; $args[] = $post_type; if ($post_status){ $sql .= " AND post_status = %s"; $args[] = $post_status; } if ($post_author){ $sql .= " AND post_author = %d"; $args[] = $post_author; } $prepare_query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql), $args)); $result= $wpdb->get_results($prepare_query);
「call_user_func_array()」という関数を使うと、指定した関数にいくつも引数をセットして、呼び出すことことができるんですね。
(こんな便利な関数があるって知りませんでした・・)
以上!
【PHP】文字列を連結しようとしたらエラーがでる。。
すごいくだらないことを書きますよ・・?
PHPで文字列連結しようとしたら、下記のようなエラーが出てしまったんですよ。
↓
「A non well formed numeric value encountered」
「 A non-numeric value encountered」
なぜかというと「+」で連結しようとしていたから。
//こんな書き方はない! $str = "ほげ" + "はげ"; //これが正しい! $str = "ほげ" . "はげ";
javascriptと間違えてときどきやってしまう、アホな失敗。
【PHP】xmlのタグの中の文字列をエスケープするよ!
xmlの中に「&」とか「<」とか「>」みたいな文字列が入っていると、simplexml_load_string()で読み込んだときにエラーしてしまいます!
そんなときはpreg_replace()で文字をエスケープして読み込んであげましょう!
下記は「< title >・・・&・・・・< /title >」みたいに書かれたタグの中を「< title >・・・& amp;・・・・< /title >」と置き換えてエスケープしています!
$content = file_get_contents('./hogehoge.xml'); //&をエスケープ $content = preg_replace('/<title>(.+?)&(.+?)<\/title>/', '<title>>$1&$2</title>', $content); $rss = simplexml_load_string($content);
これでsimplexml_load_stringでちゃんとxmlが読めるね~!
以上!
【AWS】Wordpressをhttps化!リダイレクトがトップページにしか効かない…。
サーバはAWS(アマゾン)を使っていて、前方にあるロードバランサーでhttpsを終端して、webサーバはhttpのレスポンスを処理するという、定番の構成です。
このとき、webサーバの「.htaccess」に、こんな感じでリダイレクト設定を書きますよね?
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L] </IfModule>
このリダイレクトがトップページでしか有効にならずにちょっと悩んでしまいました…。
原因は、上記の設定を書く位置が悪かったです。
リダイレクト設定は、他の設定よりも一番上側に書いたほうがいいですね。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L] </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
これでトップページ以外にも、ちゃんとリダイレクトが反映されます。
以上です!
【Wordpress】「functions.php」をいじってテストテンプレートを表示する!
ワードプレスで functions.php にコードを追加して、テストテンプレートを表示させる仕組みを作ります。
つまり、どういう事かと言うとですね・・。
①「http://hogehoge.com/」というサイトがあったとします。
②ここに「http://hogehoge.com/test_page/」みたいなテスト表示用のディレクトリを追加します(トップページの配下に追加します)
③この「/test_page/」にアクセスすると、自分が現在調整しているテンプレート(sample.php)を表示することできます。
こういうことがやりたい訳ですよ・・。
コードは以下です。これを「functions.php」に追加します。
add_action('init', 'add_test_page'); function add_test_page(){ add_rewrite_endpoint('test_page', EP_ROOT); flush_rewrite_rules(); } add_filter('query_vars', 'add_query_vars'); function add_query_vars($vars){ $vars[] = "test_page"; return $vars; } add_action('template_redirect', 'test_template_redirect'); function test_template_redirect() { global $wp_query; if (isset($wp_query->query['test_page'])) { include_once('sample.php'); exit; } }
これで「sample.php」をテスト表示することができます。
訳あって管理画面にアクセスできない人がテストページのデザイン修正するときに、この方法が使えると思います。
ところで、上記の「flush_rewrite_rules()」ですが、あまり連続的に呼び出すと、とても負荷が大きく、いろいろ不具合をもたらすのだそうな。
だから呼ぶのは一度だけでいいです。一回ページをロードしたら、下記のようにコメントアウトしてしまうといいと思います。
/* add_action('init', 'add_test_page'); function add_test_page(){ add_rewrite_endpoint('test_page', EP_ROOT); flush_rewrite_rules(); } */ add_filter('query_vars', 'add_query_vars'); function add_query_vars($vars){ $vars[] = "test_page"; return $vars; } add_action('template_redirect', 'test_template_redirect'); function test_template_redirect() { global $wp_query; if (isset($wp_query->query['test_page'])) { include_once('sample.php'); exit; } }
テスト確認が終わったら上記コードは消してしまいましょう。
(最後にもう一度「 flush_rewrite_rules()」を呼んで、追加した情報を消して元通りにしてあげるといいかも)
以上!