wordpress プラグインのコピー

wordpress プラグインのコピー

vagrant 環境に wordpress を構築したので
いままで使っていたプラグインを引越し

 cd /var/www/html/wordpress/wp-content/plugins/


wordpress を配置したディレクトリにある
wp-content/plugins/
へコピーする

sudo  scp -rp snowpool@192.168.10.249:/var/www/html/wpt/wordpress/wp-content/plugins/* .

でコピー

なお、コピーはされるけど、有効化はされないため
ダッシュボードから有効化する必要があるので注意

圧縮ファイルの操作

圧縮ファイルの操作

Linux の場合、圧縮ファイルのまま
端末から操作ができる

このため解凍する手間が省ける

圧縮展開でよく使われるのは
tar コマンド

これについては
【 tar 】 ファイルを書庫化・展開する(拡張子.tarなど)

を参考に

これ以外にも1つのファイルを圧縮することもある

今回も書籍を参考にしながら実践

今回は seq コマンドをつかう

いつもの日経Linux のコマンドには載っていないため
seq コマンドで検索

seq – 連続した数字の列を出力・表示 – Linuxコマンド

を参考に行うことに

書籍だと大きいサイズのファイルを作るけど、私のマシンでは無理なので

seq 1 1000000 > hoge


1から1000000 の数を書いた hoge ファイルを作成

容量を見るには lsコマンドをつかう

詳細なオプションについては
【 ls 】 ファイルやディレクトリの情報を表示する

を参考に

今回は容量も見やすくするたm
hオプションを使用

ls -lh hoge

結果は

-rw-rw-r--. 1 vagrant vagrant 6.6M  7月 28 06:43 2015 hoge

となる

これを gzip コマンドで圧縮

詳細については

【 gzip 】 ファイルを圧縮・展開する(拡張子.gz)

を参考に

今回はオプションなしで圧縮

gzip hoge

これでサイズを確認

ls -lh hoge.gz 

結果は

-rw-rw-r--. 1 vagrant vagrant 2.1M  7月 28 06:43 2015 hoge.gz

となり hoge ファイルは圧縮されなくなる

この圧縮ファイルは解凍せずに

そのままつかうことができる

これには zcat コマンドをつかう

詳細については

【 zcat 】 gzipやcompressで圧縮されたファイルの内容を表示する

を参考に

今回圧縮した hoge.gz の中身をみるには

zcat hoge.gz | head -n5

とする

結果は


1
2
3
4
5

となる

また、zgrep コマンドをつかうことで
圧縮ファイルの中身を検索することもできる

zgrep コマンドについては
よく使うLinuxコマンドメモ

を参考に

今回の hoge.gz から 10000 を検索するなら

zgrep 100000 hoge.gz 

となる

結果は

100000
1000000

古いファイルを上書きしないように同期

古いファイルを上書きしないように同期

この場合、rsync コマンドの
-u オプションをつかう

本来は、2つのマシンでやる予定だったけど
用意できなかったので、今回はローカルで実践

rsync コマンドについては

rsync – 高速なファイル同期(バックアップ) – Linuxコマンド

を参考に

まずはテストディレクトリを作成して実験

mkdir test

次にサンプルを書籍のものをつかうことに

cp -rp ~/GihyoShellBookSamples-master/chapter3/事務 .

もう一つ作成したディレクトリにもコピー

cd test
cp -rp ~/GihyoShellBookSamples-master/chapter3/事務 .

これで準備ok

cd
vim 事務/厄介な仕事.txt 

でファイルを編集し
1行目末尾に done を追加

その後、rsync で同期する

rsync -av 事務/ test/事務/

これで同期するけど
このとき間違えて
test 側から同期するとデータが古くなってしまう

rsync -av test/事務/ 事務/

となってしまうとデータが古くなる

この対策として
-u オプションをつける
これをつけることで
タイムスタンプを比較し
新しいものを残すようになる

rsync -avu test/事務/ 事務/

これで更新したファイルだけ同期になる

なお、これだけだと、test のほうは古いままなので

rsync -avu 事務/ test/事務/
cat test/事務/厄介な仕事.txt

というように相互に行えば
更新したファイルを相互に同期することができる

注意点は、ファイルの変更の有無ではなく
タイムスタンプなので
ファイルを開いて保存するだけでも対象になってしまうこと

今回はローカルでのファイルだけど
これをリモートマシンでやれば
簡易バックアップができる

ほかのマシンと同期

ほかのマシンと同期

ほとんどの場合ssh 接続がデフォルトなので
通常は sshを明示的にしなくてもいい

手元の Music ファイルを
リモート先と同期するのなら

rsync -av Music/ developapp.net:~/Music/

というようにする

もしIP指定で、逆に自分の新規インストールマシンに
音楽を同期させたいのなら

rsync -av 192.168.10.248:~/Music/ ~/Music/

とすればいい

もし、ユーザが違うのなら

rsync -av snow@192.168.10.248:~/Music/ ~/Music/

となる

あと、講習とかで ssh を変更したのなら
zオプションで通信を圧縮

そして
rsyncの使い方(オプション SSH)

にあるように
-e オプションをつかうことで暗号化してファイル転送します

もし 222 番にしたのなら

rsync -avz -e ‘ssh -p 2222’ ~/Download/ snowpool@191.168.10.248:~/Download/

とすればいい

rsync コマンドでシンボリックリンクを扱うには

rsync コマンドでシンボリックリンクを扱うには

rsync コマンドで
シンボリックリンクを同期するには
-lオプションでシンボリックリンクをそのままコピーする
もしくは
-a オプションですべてコピーする

試しに ln コマンドでシンボリックリンクを作成

lnコマンドの詳細は
【 ln 】 ファイルやディレクトリにリンクを張る
を参考に

ln -s /etc/ link

で/etc/のシンボリックリンク link を作成

-s オプションはシンボリックリンクを
作成するオプション

次に rsync コマンドで同期

sudo rsync -av ~/ /var/tmp/

rsyncコマンドの詳細は
rsync – 高速なファイル同期(バックアップ) – Linuxコマンド

を参考に

a オプションで属性をコピー
v オプションでログ出力

終わったら、ls コマンドで調べる

ls コマンドの詳細は
【 ls 】 ファイルやディレクトリの情報を表示する

を参考に

今回使用するオプションは
-l オプションでファイルの詳細表示
-d オプションで
ディレクトリを含んでいてもファイルみたいに表示

ls -ld /var/tmp/link

ls -ld link

の結果は

lrwxrwxrwx. 1 vagrant vagrant 5  7月 27 09:10 2015 /var/tmp/link -> /etc/

lrwxrwxrwx. 1 vagrant vagrant 5  7月 27 09:10 2015 link -> /etc/

というように同じになる

ディレクトリの同期する rsync コマンド

ディレクトリの同期

同期には
rsync コマンドを使用

詳しくは
rsync – 高速なファイル同期(バックアップ) – Linuxコマンド
を参考に

今回は /home/vagrant/以下を
/var/tmp/ へコピー

rsync -av /home/vagrant/ /var/tmp/

オプションの
a はファイル属性をそのままコピー
v はファイルのログ出力になります

コピーしたときに同じになるので

ll /home/vagrant/ | head -n5

ll /var/tmp/|head -n5

の実行結果は同じになる

ちなみに、コピーするときに
/home/vagrant

/home/vagrant/
では意味が変わる
最後の / がないと、ディレクトリごと
コピーしてしまう

nao,rsync コマンドは
変更のあったファイルや新規ファイルなど
変化のあったものだけを同期する
つまり差分バックアップみたいなかんじ
なので
2回目は時間短縮できる

実際の時間を計るため
time コマンドを使い計測

timeコマンドの詳細は
【 time 】 指定したコマンドの実行時間を表示する
を参考に

実行するコマンドは

time rsync -av /home/vagrant/ /var/tmp/

1回目の結果は

real	0m2.055s
user	0m0.538s
sys	0m1.111s

2回目の結果は

real	0m0.422s
user	0m0.065s
sys	0m0.228s

というようにかなり短縮される

注意点は、少しでも変化があれば
同期対象にしてしまう

これは仮想マシンなど
GB単位のファイルで行われることになる

あと、スクリプトで実行するときなど
/etc/ のように
sudo がないと同期できないものもあるので注意

投稿記事にスライドショーの追加

投稿記事にスライドショーの追加

画像スライダーをつけるには
Meta Slider
プラグインを使います

本来なら撮影した写真を使うのですが
今回は実験
とはいっても最初から素材を用意するのは大変なので
無料写真素材サイト
FOODIE’S FEED

のものを使わせていただくことにします

なお、本来は、カスタム投稿でアップロードしたものを
使う予定でしたが、方法がわからないため
プラグインと投稿ごと行うことになります

まずは
Meta Slider
をインストールします

ダッシュボード > プラグイン >
新規追加で
Meta Slider
で検索し、インストールと有効化を行います

meta

するとダッシュボードに
Meta Slider という項目ができるので
これをクリックし、
最初のスライドショーを作成するため
+ボタンをクリックします

meta2

名前が新規スライダーだとわかりにくいので
sweet に変更し、スライドを追加をクリック

meta3

ファイルアップロード画面になるので
ダウンロードしておいたファイルを選択します

なお、アップロードするサイズが大きいとエラーがでます

meta5[

初期設定では2MBなので
変更しないとほぼ無理だと思います

今回は Ubuntu 14.04 での設定変更です
方法は2つあり
php.ini を変更する
もしくは
.htaccess での設定になります

今回はphp.ini の変更にします

sudo vim /etc/php5/apache2/php.ini 

で設定ファイルを開き

/post_max
で検索

673行目ぐらいに

post_max_size = 8M

があるので

post_max_size = 2000M

に変更

次に、
/upload_max
で検索し
805行目あたりの

upload_max_filesize = 2M

upload_max_filesize = 2000M

に変更

これで2GBまでアップできます

設定できたら

sudo service apache2 restart

で apache2 を再起動

もう一度アップロードすると成功します

アップロードが完了すると
一覧ができるので
保存をクリックします

meta6

次に、投稿記事に挿入していきます

テストとして
ダッシュボードの投稿から
Hello world を選びます

モードをビジュアルからテキストに変更し
スライダーを追加
をクリックします

meta7

どれを追加するか選ぶ画面になりますが
今回は1つしかないので
そのまま
Insert slideshow
をクリックします

meta8

すると、

[metaslider id=16]
というように
ショートコードが挿入されます

meta10

これで投稿にスライダーが追加されます

meta9

今回は記事の下へ追加しましたが
場所を変更することで
投稿内の好きな場所へ配置することができます

なお、今回の変更で不要になるギャラリー部分は削除しますので

<h3>ギャラリー</h3>
<img src="image/food.jpg" alt="" width="300" height="300">

を削除します

これでソースは

<?php get_header(); ?>

<?php if(have_posts()): while(have_posts()): the_post(); ?>

  <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
  <?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
  <h3><?php echo post_custom("Impression")?></h3>
  <?php endif;?>
  <?php the_content(); ?>
  <img src="image/tee.jpg" alt="" width="300" height="300">

  <h3>メニュー</h3>
  <div data-role="collapsible">
    <h3>私のおすすめメニュー</h3>
    <p>イカスミパスタ</p>
  </div>
<?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
<h3>店舗情報</h3>
  <table data-role="table" data-mode="reflow" class="ui-responsive">
    <thead>
      <tr>
        <th>店名</th>
        <th>定休日</th>
        <th>営業時間</th>
        <th>ランチ価格</th>
        <th>住所</th>
        <th>電話番号</th>
        <th>HP</th>
        <th>アクセス</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><?php echo post_custom("ShopName")?></td>
        <td><?php echo post_custom("Holiday")?></td>
        <td><?php echo post_custom("Time")?></td>
        <td><?php echo post_custom("lunch")?></td>
        <td><?php echo post_custom("Address")?></td>
        <td><?php echo post_custom("tel")?></td>
        <td><?php echo post_custom("Hp")?></td>
        <td><?php echo post_custom("Access")?></td>
      </tr>
    </tbody>
  </table>
<h3>周辺地図</h3>
<?php
    $map = esc_html(get_post_meta($post->ID,"Address",true));

    echo do_shortcode('[map addr="'.$map.'" height="400px" zoom="16"]');
 ?>
  <?php endif;?>

  <?php endwhile;   else: ?>
    <p>記事はありません</p>
  <?php endif; ?>


<?php get_footer(); ?>

となります

Google Map を埋め込む wordpress プラグイン

Google Map を埋め込む wordpress プラグイン

現在の状態だと

  <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3241.7481415393895!2d139.74543744402948!3d35.65857638920314!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188bbd9009ec09%3A0x481a93f0d2a409dd!2z5p2x5Lqs44K_44Ov44O8!5e0!3m2!1sja!2sjp!4v1436313888247" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>

となっているため地図が固定されています

これを投稿したお店の場所に変えてみます

今回は Google Map を埋め込めるプラグインを使います

ダッシュボード > プラグイン >新規追加

Simple Map を検索し
インストールして有効化します

map

なお、 Simple Map を
投稿記事内に使いたい場合は
Google Mapを埋め込むWordPressプラグイン「Simple Map」の使い方

を参考に

今回は、テーマファイルに埋め込み
カスタムフィールドの値を元に Map を出します

この場合、
カスタムフィールドで入力した住所を変数に格納し
それを
do_shortcode() で表示します

なお、カスタムフィールドの値を取得し
変数にいれるときには
esc_html() でエスケープします

esc_html() については
WordPressでechoする文字を適切にエスケープする

の解説を参考に

今回、取得するカスタムフィールドの値は
Address になります

[解決済み] 投稿ページから記事ごとに地図を表示したい

カスタムフィールドに住所を入れてgoogle mapsを表示する
を参考に
テンプレートファイルの single.php に埋め込みました

まず、カスタムフィールドで入力した住所を
変数に入れます

$map = esc_html(get_post_meta($post->ID,"Address",true));

Adress は、カスタムフィールドで設定したIDです

次に、地図の表示です
決め打ちで表示するのなら

<?php echo do_shortcode('[map addr="東京都千代田区永田町1-7"]'); ?>

とすれば表示されます

構文は
[map addr=”住所”]
となります

住所は 変数 $map に格納しているので

echo do_shortcode('[map addr="'.$map.'"]');

で表示できます

これで地図も記事ごとに表示できるようになりました

cus4

今回の変更により以下のコードになります

<?php get_header(); ?>

<?php if(have_posts()): while(have_posts()): the_post(); ?>

  <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
  <?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
  <h3><?php echo post_custom("Impression")?></h3>
  <?php endif;?>
  <?php the_content(); ?>
  <img src="image/tee.jpg" alt="" width="300" height="300">

<h3>ギャラリー</h3>
<img src="image/food.jpg" alt="" width="300" height="300">

  <h3>メニュー</h3>
  <div data-role="collapsible">
    <h3>私のおすすめメニュー</h3>
    <p>イカスミパスタ</p>
  </div>
<?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
<h3>店舗情報</h3>
  <table data-role="table" data-mode="reflow" class="ui-responsive">
    <thead>
      <tr>
        <th>店名</th>
        <th>定休日</th>
        <th>営業時間</th>
        <th>ランチ価格</th>
        <th>住所</th>
        <th>電話番号</th>
        <th>HP</th>
        <th>アクセス</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><?php echo post_custom("ShopName")?></td>
        <td><?php echo post_custom("Holiday")?></td>
        <td><?php echo post_custom("Time")?></td>
        <td><?php echo post_custom("lunch")?></td>
        <td><?php echo post_custom("Address")?></td>
        <td><?php echo post_custom("tel")?></td>
        <td><?php echo post_custom("Hp")?></td>
        <td><?php echo post_custom("Access")?></td>
      </tr>
    </tbody>
  </table>
<h3>周辺地図</h3>
<?php
    $map = esc_html(get_post_meta($post->ID,"Address",true));
    
    echo do_shortcode('[map addr="'.$map.'"]');
 ?>
  <?php endif;?>

  <?php endwhile;   else: ?>
    <p>記事はありません</p>
  <?php endif; ?>


<?php get_footer(); ?>

カスタムフィールドの入力と反映

カスタムフィールドの入力と反映

カスタムフィールドを使えるようにしたので
現在テーブルに入力した値をこちらに入力します

今回は hello world の投稿の下に追加された
カスタムフィールドテンプレートに入力します

cus

入力ができたら
保存をクリックしておきます

次に、この入力内容を反映するために
single.php を編集します

    <tbody>
      <tr>
        <td>○○のお店</td>
        <td>日曜日</td>
        <td>11:00〜17:00</td>
        <td>ランチ1000円</td>
        <td>東京都</td>
        <td>000-000-0000</td>
        <td>http://example.co.jp</td>
        <td>○○駅○版口から徒歩</td>
      </tr>
    </tbody>

の部分を書き換えます

    <tbody>
      <tr>
        <td><?php echo post_custom("ShopName")?></td>
        <td><?php echo post_custom("Holiday")?></td>
        <td><?php echo post_custom("Time")?></td>
        <td><?php echo post_custom("lunch")?></td>
        <td><?php echo post_custom("Address")?></td>
        <td><?php echo post_custom("tel")?></td>
        <td><?php echo post_custom("Hp")?></td>
        <td><?php echo post_custom("Access")?></td>
      </tr>
    </tbody>

というように書き換えます

<?php echo post_custom("ShopName")?>

というように
post_custom() の引数は
カスタムフィールドで設定したIDになります

ShopName なら店名になります

これでプレビューを見ると
テーブルに内容が反映され表示されます

cus2

次に、お店の簡単な紹介文も
カスタムフィールドのものを反映するようにします

<h3>午後の緩やかな時間を本とともに</h3>

  <?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
  <h3><?php echo post_custom("Impression")?></h3>
  <?php endif;?>

というように修正します

これでほぼ内容を反映できるようになりました

今回のコードは以下のようになります

<?php get_header(); ?>

<?php if(have_posts()): while(have_posts()): the_post(); ?>

  <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
  <?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
  <h3><?php echo post_custom("Impression")?></h3>
  <?php endif;?>
  <?php the_content(); ?>
  <img src="image/tee.jpg" alt="" width="300" height="300">

<h3>ギャラリー</h3>
<img src="image/food.jpg" alt="" width="300" height="300">

  <h3>メニュー</h3>
  <div data-role="collapsible">
    <h3>私のおすすめメニュー</h3>
    <p>イカスミパスタ</p>
  </div>
<?php if ( get_post_meta($post->ID,'ShopName',TRUE) ): ?>
<h3>店舗情報</h3>
  <table data-role="table" data-mode="reflow" class="ui-responsive">
    <thead>
      <tr>
        <th>店名</th>
        <th>定休日</th>
        <th>営業時間</th>
        <th>ランチ価格</th>
        <th>住所</th>
        <th>電話番号</th>
        <th>HP</th>
        <th>アクセス</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><?php echo post_custom("ShopName")?></td>
        <td><?php echo post_custom("Holiday")?></td>
        <td><?php echo post_custom("Time")?></td>
        <td><?php echo post_custom("lunch")?></td>
        <td><?php echo post_custom("Address")?></td>
        <td><?php echo post_custom("tel")?></td>
        <td><?php echo post_custom("Hp")?></td>
        <td><?php echo post_custom("Access")?></td>
      </tr>
    </tbody>
  </table>
<h3>周辺地図</h3>
  <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3241.7481415393895!2d139.74543744402948!3d35.65857638920314!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188bbd9009ec09%3A0x481a93f0d2a409dd!2z5p2x5Lqs44K_44Ov44O8!5e0!3m2!1sja!2sjp!4v1436313888247" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
  <?php endif;?>

  <?php endwhile;   else: ?>
    <p>記事はありません</p>
  <?php endif; ?>


<?php get_footer(); ?>

ディレクトリバックアップ

ディレクトリバックアップ

tar コマンドでディレクトリのしたを1つにまとめ
圧縮保存する

~/以下のファイルを
/home/

日付_home.tar.gz
で保存する

sudo tar zcvf /home/20150724.tar.gz ~/

/home に保存するには
sudo でやらないと権限の関係でできない

ちなみに、元のファイルはそのままなので心配ない

オプションの意味は
zで gzip圧縮
cで圧縮
vでログ表示
fでファイルにバックアップを作成
という意味

アーカイブはバックアップとも言える

圧縮するときには
tar zcvf バックアップファイル名 対象パス
と覚えておく

さらに圧縮率をあげるなら
jオプションをつかう
これは圧縮方法の違いで
zは gzip
jだと bzip2
になる

この場合
保存するときのファイル拡張子を
bz2 にする

圧縮のときには
tar jcvf バックアップファイル名 対象パス
となる

tar コマンドについては

【 tar 】 ファイルを書庫化・展開する(拡張子.tarなど

にオプションの意味なども載っているので
参考に

そして時間の違いを実験するため
time コマンドで実行時間を表示します
time コマンドについての詳細は
【 time 】 指定したコマンドの実行時間を表示する

を参考に

結果ですが

time sudo tar zcvf /home/20150724.tar.gz ~/

でzオプションによる gzip 圧縮の場合


real	0m20.856s
user	0m8.941s
sys	0m7.542s

となり

time sudo tar jcvf /home/20150724.tar.bz2 ~/

で j オプションによる bzip2 圧縮だと

real	0m44.561s
user	0m32.664s
sys	0m6.771s

そして、実際にサイズを ls コマンドで
測ってみます
ls コマンドの詳細は
【 ls 】 ファイルやディレクトリの情報を表示する

を参考に

今回つかうオプションは
a すべてのファイルを対象
h 単位を読みやすくする
l 詳細表示
t タイムスタンプ順にして並べる
r 逆順にして並べる

これらをつかって比較結果を表示します

ls -ahltr /home/20150724.tar.*

結果は


-rw-r--r--. 1 root root 83M  7月 24 07:34 2015 /home/20150724.tar.gz
-rw-r--r--. 1 root root 73M  7月 24 07:36 2015 /home/20150724.tar.bz2


となります

これにより
bzip2 圧縮のほうが73MBとなり
サイズが小さいということがわかります