やったこと

webサービスを作るときに考えたことを垂れ流します

【Wordpress】カスタム投稿のタイトルを文字列検索してタームを設定!

ワードプレスのカスタム投稿をタイトルで検索して、まとめてタームを追加するよ!

下記のようなコードを実行すると、タイトルに「横浜」を含むカスタム投稿を抽出して、それらに「東京」というタームをセットするよ!

<?php

//カスタム投稿を条件検索
$args = array(
  'numberposts' => 10000,  //とりあえず1万件抽出
  'post_type' => 'address',   //adressという名前のカスタム投稿タイプを検索
  's' => '横浜'  //タイトルを「横浜」で検索
);
$customPosts = get_posts($args);

foreach($customPosts as $post){
  $post_id = $post->ID;
  $taxonomy = "area";  //追記するタクソノミーの名前は「area」
  $terms = "tokyo";  //追記するターム「東京」のスラッグ名は「tokyo」
  wp_set_object_terms($post_id, $terms, $taxonomy, true);  //タームをセット!
}

?>

以上!

レスポンシブのグーグル広告の高さが設定できない!

グーグルアドセンスの「レスポンシブ」の広告を張り付けるときに、レイアウトの調整ができなくて困った…。

広告領域の高さを最大300pxまでに制限したかったんだけど、この広告を張りつけた親要素には強制的に「height: auto !important;」が付与される様子。
なので、かっこう悪い縦長のバカでかい広告ばかりが表示されてしまう。
(こんなサイズは見っともないので使いたくない…)

広告のサイズを制限したかったら、おとなしくレスポンシブでなくて「固定サイズ」の指定をしなさいということなんだろうか…。

【LINUX】sedでファイルの末尾に変数の文字列を追記する!

LINUXシェルスクリプトを使ってファイルの末尾に文字列を追加するよ!
下記のシェルでは「text.txt」というファイルの最後に

owari!
owari!
owari!

と三行の文章を追記しています!

#!/bin/sh
file='test.txt'

#フッタ部分を追加
foot='owari!\n'
foot=$foot'owari!\n'
foot=$foot'owari!\n'

sed "\$a ${foot}" ${file}

sedコマンドの中の「$a(最終行)」の箇所をエスケープするのがポイントだよ!
これをしないと「コマンドが見つかりません」とかエラーが出て怒られちゃうから注意!

以上!

mixhostのサーバーでドメイン追加しようとしたらエラー発生!

ミックスホストで借りたサーバーで、新しく「アドオンドメイン」の画面からドメインを追加しようとしたんだけども、

「A DNS entry for “xxxx.com” already exists. You must remove this DNS entry from this server or all servers in the DNS cluster to proceed.」

などとエラーが出て、新規追加できなくなってしまった・・。

状況としては、下記のような「mixhostサーバー」→「mixhostサーバー」の間で、お引越しをしようとした時に発生したもの。
複数サーバーアカウントを契約しているのですが、サーバー間でドメインの移動は可能ですか? – mixhost ヘルプ&サポート

しばらく待てばエラーが解消されるかと思い、半日くらい放置したんだけども、依然として登録不能な状態が続いた。
だんだん不安になってきたので、カスタマーサポートの窓口にメールを送って状況を知らせてみた。

そうしたら「申し訳ありません・・」とメールが帰ってきて、数時間くらいでエラーを解消してくれた。

何かの不具合だったんだろうか・・。
とりあえずは、このエラーが発生したら、窓口にメールをして訊いてみるのがよさそうです・・。

以上!

【PHP】curlをyumアップデートしたらエラーするようになった件

とても古いシステムを「yum install curl-devel」と打って、新しいcurlにアップデートした。

そうしたらPHPcurlを使うと、「エラー番号:77 CURLE_SSL_CACERT_BADFILE」で接続失敗してしまうようになった。

証明書関係のエラーなんだろうけど、どうしたらいいのか良くわからない…。

結論からいうと、「sudo service httpd restart」などと打って、サーバーのhttpdを再起動すればよい。
証明書が再読み込みされて、問題なく接続できるようになった。

こんなことで一日使ってしまったよ…。

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()」という関数を使うと、指定した関数にいくつも引数をセットして、呼び出すことことができるんですね。
(こんな便利な関数があるって知りませんでした・・)

以上!