abコマンドでサーバーのパフォーマンスを測る
wordpressの速度を測るため、apacheに標準でついてくる負荷テストツールを使う
例) 10人の同時接続を100回実行するコマンドで計測結果をbench.htmlで出力
#ab -n 100 -c 10 -w http://計測するサイトのURL >bench.html
Apache Benchを使った負荷テストのやり方 | Web活メモ帳
my.cnfを触って各項目の数値を増やした
Document Length: 7499 bytes
Concurrency Level: 10
Time taken for tests: 3.337 seconds
Complete requests: 10
Failed requests: 0
Total transferred: 77430 bytes
HTML transferred: 74990 bytes
Requests per second: 2996.54
Transfer rate: 23202.20 kb/s received
増やす前
Document Length: 7499 bytes
Concurrency Level: 10
Time taken for tests: 3.938 seconds
Complete requests: 10
Failed requests: 0
Total transferred: 77430 bytes
HTML transferred: 74990 bytes
Requests per second: 2539.52
Transfer rate: 19663.53 kb/s received
Requests per secondが大きいほど改善しているとのこと。確かに早くなっている
特定のカスタムフィールドを持つ投稿の除外 (空の記事を表示させる)
特定のカスタムフィールドを持つ投稿を除外する方法(力技)
解決したので、書いておく。
いろいろ調べた結果、meta_queryやmeta_key、meta_value、meta_compareを設定し、「!=」や「NOT IN」や「NOT LIKE」を試したが、カスタムフィールドが空なのではなくの”そのkeyを持っているわけではない”ので検索にヒットしないのでは、という結論に。
調べていた中で、使えそうだった以下のフォーラムを参考に力技で除外してみた。
流れ
- あるカスタムフィールドを持つ記事の記事IDを取得
- excludeで除外
ソース
single.phpの中で、関連するアイテムを表示させる様な場所を想定
下の例ではカスタムフィールド「check」にチェックが入っている記事を除外する
<?php //投稿のカテゴリー情報を取得 $cat = get_the_category(); $catparent = $cat[0]->category_parent; $catcurrent = $cat[0]->cat_ID; //そのカテゴリーの記事数を取得 $cat_count = get_category($catcurrent)->category_count; //1.カスタムフィールドcheckを持つ記事を取得。 //numberpostsは大元の設定に依存するのでここで指定する $exclude_post = array( 'category' => $catcurrent , 'numberposts' => $cat_count, 'meta_query' => array( array( 'key' => 'check', 'value' => 'check', ) ) ); //foreachでcheckをもつ記事のIDを取得 $postslist = get_posts( $exclude_post ); foreach($postslist as $postval){ $result[] = $postval->ID; }; //配列をカンマ区切りに $result_e = implode(",", $result); //2.excludeで除外し、それ以外の記事を5件表示 $args = array( 'numberposts' => 5, 'orderby' => 'rand' , 'category' => $catcurrent , 'exclude' => $result_e, ); $posts = get_posts($args); global $post; ?> <?phpif($posts): foreach($posts as $post): setup_postdata($post); ?> // //記事投稿部分 //
2015/5/7追記
- excludeしたい記事の件数が1000件以上になると読み込みがタイムアウトするので、注意
参考
- 配列をカンマ区切りで出力させる
- カテゴリーの記事数
concrete5を試してみた。
インストール
ここから最新版をダウンロード
ダウンロード :: concrete5 Japan 日本語公式サイト
ダウンロードしたら該当するフォルダに入れる
データベースの作成
- 照合順序はutf8_general_ci
インストール完了。ページが表示された。
- 編集モードを押してみる
レイアウトの変更などがそのまま出来る。
それぞれのブロックが独立している感じ。
ブログの記事を書いてみる
管理画面のメニューにある「書く」で記事を書いてみる。
wordpressでいう「投稿」かな?
とくに違和感はなし。
サムネイルなども設定できて、記事のメインビジュアルみたいな画像も設定できる。
wordpressみたいな、難しい設定はないので、触ってもらいやすいかも知れない。
wordpress ktai-styleでのPC表示切り替えとカスタマイズ
ktai-styleでPC表示の切り替えを行なう際、自作でテーマをつくっていると、ついつい
<?php ks_switch_pc_view(); ?>
というコードを入れ忘れてしまう。
これだとPCに切り替えるリンクが表示されないので注意。
テキストを変更してみる
通常は「PC 表示にする」と表示されるがこのテキストを変更したい場合は、
ktai-style/lang/ktai_style-ja.poのファイルにある、
「PC 表示にする」部分を変更するとテキストが変わる。
が、ただテキストエディタで変更してもpoファイル(翻訳リソースファイル)という特殊なファイルの為、適応されない。
poファイルを編集し、「.mo」というバイナリファイルにコンパイル(コンピュータが実行可能な形式に変更する)しなければならない。
phpMyAdminで特定の文字が入っているカスタムフィールドを抽出し、該当する複数の記事を一括で削除する
久々にWordpressの記事を。
カスタムフィールドはCustom Field Templateなどで拡張して、様々な入力を実現することができる。
今回はカスタムフィールド内に、ある特定の文言や数値等が入っている記事を一括で消したい。
という場合の方法を考えてみた。
前提として
SQLでカスタムフィールド内に特定の文字が含まれる列を検索して、見つかった記事のIDを抽出し、記事消す作業を行う。
なので、ジャンルというカスタムフィールドを作成し「metal」という入力がある記事を探す場合「death metal」も検索対象となるので注意。
方法
phpMyAdminにログインして該当するデータベースに移動する
カスタムフィールドの値が入ってる「wp_postmeta」テーブルを表示する
一覧が表示されるので、上部メニューの「検索」をクリックし、検索する。
今回は「う○こ」が含まれる列を検索。
(%%はワイルドカードと呼ばれるもの。詳しくはこちらを参照。)
う○こが含まれている列の一覧が表示されるので、エクスポート。
う○こをエクスポート。
1行目にカラムを追加する。こうするとエクスポートしたCSVの1行目に「meta_id」「post_id」というカラムが付加される。
こうしてエクスポートしたCSVのpost_idが記事のIDとなる。
これを以下のSQLに反映させ、SQLを流すと、見事該当の記事を消す事が出来る。
DELETE FROM wp_postmeta WHERE `post_id` IN(う○こが含まれる記事のpost_id)
例
DELETE FROM wp_postmeta WHERE `post_id` IN(1,2,3,4,5)
ただこれだとpost_metaは削除できたが、記事の大元「wp_posts」は消せていない。
そこで以下。
DELETE FROM wp_posts WHERE `ID` IN(う○こが含まれる記事のpost_id)
追記
タクソノミーと記事を結びつけるテーブルも削除する必要がある。
DELETE FROM wp_term_relationships WHERE `object_id` IN(1,2,3,4,5)
これで該当する記事を削除する事ができる。