WordPressアプリの改行問題
WordPress の Android アプリで書くと、改行がおかしい。
改行すると、必ず間に1行空行が入ってしまう。
また、複数行の空行を入れても、1行にまとめられてしまう。
だから、私のように段落ごとに間に1行空行を入れる、という書き方ができなかった。
昔はできたのに、最近のアプリだとできなくなっていた。
それを直す方法がわかった。
アプリの下のタブ4つ目の [自分] というタブを開くと、[アプリ設定] というのがある。
ここで、[編集者][エディタータイプの設定] という項目があり、”Beta” が指定されていたら “レガシー” に変える。
これで、間に1行空行が入る問題はなくなった。
ただ、複数行の空行を入れたときに1行にまとめられてしまうのは変わらないが、
スペースとか入れておけば、見た目的には複数行になる。
子カテゴリのときだけ逆順で表示する
旅カテゴリのところは、過去の旅をクリックしたときに、
帰ってきた後の部分から読み始めて、クリックして遡らないといけなくて、読みにくかった。
そこで、旅カテゴリ自体をクリックしたときは最新を先頭に表示し、
それぞれの旅をクリックしたときは、その旅の最初である過去を先頭に表示するようにしたかった。
親カテゴリのテンプレートを使う に書いたように、
旅カテゴリはどれを選んでも、専用のカテゴリファイル(category-42.php)を使うようにしたので、
編集したファイルはその1つだけである。
で、逆順に表示するのは query_posts($query_string.’&order=ASC’) を while の前に入れればいいらしいので、
以下のように、親カテゴリ(旅カテゴリ)をクリックしたときは DESC (最新が先頭) にして、
子カテゴリ(2013.08: ケニア・タンザニア等)をクリックしたときは ASC (過去が先頭) になるようにした。
<?php
if(is_category(’42’)): query_posts($query_string.’&order=DESC’);
else: query_posts($query_string.’&order=ASC’);
endif
?>
<?php while (have_posts()) : the_post();?>
ページ移動のときも Newer | Older という順で表示していたのだが、そこも逆にしないといけない。
<?php if(is_category(’42’)) : ?>
<?php previous_posts_link(‘« Newer’) ?> <?php next_posts_link(‘Older »’) ?>
<?php else : ?>
<?php previous_posts_link(‘« Older’) ?> <?php next_posts_link(‘Newer »’) ?>
<?php endif; ?>
これで少し読みやすくなったかな。
親カテゴリのテンプレートを使う
前に映画カテゴリのテンプレートを置き換えたのだが、子カテゴリそれぞれに対してテンプレートを作っていた。
今度は旅行カテゴリをいじろうと思っているのに、数が多くてめんどくさい。
そこで探してみたら、まさにその内容が載っていたので試したら、そのままできた。
子カテゴリのアーカイブページを親カテゴリ用のテンプレートファイルで表示しよう
functions.php に category_template というフィルタを追加して、そこで、
自分用のカテゴリファイルがなくて親がいる場合には、親のカテゴリファイルを使うように書く。
こっち方面もうちょっと勉強しようかな。
WordPress にそこまで時間をかけたことないが、仕事は2ヶ月くらいで何とかなることを考えると、
こういったものに労力を割いたほうが今後のためになるな。
WordPress 2.9.1 から WordPress 3.6.1 へのアップグレード
MySQL5 を使える環境であることが前提。
不安なので、以前のバージョンは FTP で全ファイルをバックアップしておく。
MySQL4 から新しくMySQL5 に変えるので、まずは接続テスト。
wp-config.php ファイルのデータベース接続情報を編集し、MySQL5 につないでみる。
ファイルを保存するときに、UTF-8 で BOM のチェックを外して保存しないといけないので要注意。
接続先を変えただけなので、古い WordPress + MySQL5 という組み合わせ。
問題なく接続でき、管理画面にログインできることを確認しておく。
(管理画面にログインした後で真っ白になったが BOM チェックがついてたせいだった)
次に、WordPress自体のアップグレードを行う。
自動アップグレードがなぜか動かなかったので、手動で行った。
(ダウンロードしていますというメッセージのまま動かなかった)
wordpress-3.6.1-ja.zip をダウンロードして展開。
wp-content ディレクトリと wp-config.php は上書きせず、他のディレクトリとファイルを更新する。
wp-content/languages ディレクトリも更新していい。
ブログのURL の wp-admin/update-core.php にアクセスする。
アップグレードのためのデータベース更新をしてくれる。
無事に管理画面にログインできたら、プラグインの更新をする。
ブログ自体の見た目は以前とほとんど変わらないが、けっこういじってるので、ちょっと崩れてる。
(前の記事、後ろの記事へのリンクが全エントリについてる…)
その程度なら後で直せばいいか・・・。← まだ直してない。
phpMyAdmin による MySQL4 から MySQL5 への移行
ここのブログ環境は WordPress を使っているのだが、ずっと古いバージョンのままだった。
なぜなら LaCoocanサーバの MySQL のバージョンが古くて、WordPress を更新できなかったのだ。
久しぶりにサーバ管理のWeb画面にログインしてみたら、MySQL5 にアップデートできるとのこと。
やらなきゃなーと思いつつ放置していたが、やっと今日アップデートした。
phpMyAdmin を使って、MySQL4 からデータをエクスポートし、MySQL5 にインポートする。
いくつか詰まった点があったのでメモ。
1. MySQL4 のアカウントでログインする時、エンコードをUTF-8にする。
エンコードなし(non)にしてるのに EUC-JP でエクスポートされてておかしいと思ったら、
ログイン時のエンコードのままというのが non らしい。
2. ログインしたらデータベース名をクリックしてトップページを抜け、エクスポート画面を開く。
全テーブルを、SQL形式、圧縮なし、エンコードなし(non)でファイルに保存する。
3. エクスポートしたファイルを開き、TYPE=MyISAM を ENGINE=MyISAM に置換する。
MySQL4 と MySQL5 のバージョン間の違いのようである。
4. 編集し終わったファイルのサイズが 8MB 以下になるように分割する。
(インポート画面で ZIPファイルを認識すると書かれていたが、ダメだった。)
5. MySQL5にログインし、インポートする。
ここでエラーが出なければOK.
WordPress のサイドバーを変える
特定カテゴリーのときに使用する sidebar.php ファイルを指定することはできたので、
次はその内容をメインのものと違うものにしようと思った。
追加したいウィジェットを並べれば基本的なものは使える。
テンプレートタグ/the widget
例えば、カレンダーを入れたいときはこんな感じである。
<div id=”sidebar”>
<div class=”sidebar-widget”>
<h4>カレンダー</h4>
<?php the_widget(‘WP_Widget_Calendar’); ?>
</div>
</div>
あとは、他のカテゴリーの情報とかを隠したかったので、最近の記事リストを独自に作った。
カテゴリー名とURLを出すところは前と同じだが、カテゴリー数だけ繰り返すので foreach を使っている。
このとき、カテゴリーIDが並んでいないので、一度配列に入れている。
最新の投稿から何件か、タイトルとリンクを出したかったので、
get_posts(‘numberposts=10 & category=’.$value); でカテゴリーから10記事をリストするようにした。
<h4>最近の記事</h4>
<?php
$array = array(43,44,45,47,46);
foreach ($array as &$value):
?>
<b><a href=”<?php
echo get_category_link($value);
?>”>
<?php
$cat = get_category($value);
echo attribute_escape($cat->cat_name);
echo ‘ (‘. attribute_escape($cat->category_count) .’)’;
?></a>
</b><br/>
<ul>
<?php $posts=get_posts(‘numberposts=10 & category=’.$value); ?>
<?php if ( $posts ) : foreach($posts as $post) : setup_postdata($post); ?>
<li><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a> - <?php the_time(‘Y/n/j’); ?>
<?php endforeach; endif; ?>
</ul>
<?php
unset($value);
endforeach;
?>
</div>
参考: WordPressで特定カテゴリーの新着記事リンクを表示させたい
あとはCSSとか変えようかなって思ってたけど、それ以外はだいたい思い通りになった。
そんなこんなで、「映画」カテゴリーを変えていったのである。
あとは同じように独立性が高い「旅」カテゴリーも同様に変えたいと思っている。
WordPress で1つ上の階層のカテゴリー名を表示してリンクする
参考:
親カテゴリ名を取得し表示したい
親カテゴリーIDの取得
トップカテゴリーから全て並べるのではなくて、自分と1つ上の親カテゴリを使いたかった。
<a href=”自カテゴリのリンク”>親カテゴリ名と自カテゴリ名を並べる</a>
とかしたくて、
<a href=”<?php
$categoryname = single_cat_title(”,false);
$categoryid = get_cat_ID($categoryname);
echo get_category_link($categoryid);
?>”>
<?php
$cat_now = get_the_category();
$cat_now = $cat_now[0];
$cat = get_category($cat_now);
if ($cat->parent) {
$parent = get_category($cat->parent);
echo attribute_escape($parent->cat_name);
}
echo attribute_escape($cat->cat_name);
?>
</a>
っぽくしてみて、できた。
(実際にはカテゴリー別に分岐とかしてるけど)
WordPress でカテゴリーごとにデザインを変える
wp-content/themes/使用中のテーマ/ にて、
category.php がある場合は、カテゴリーアーカイブ(?cat=ID)を選んだときにそれが使われ、なければ index.php が使われる。
category-ID.php がある場合、それはそのIDのカテゴリーアーカイブのときに使われる。
例えば、?cat=48 というカテゴリーを選ぶと、
1. category-48.php
2. category.php
3. index.php
の順番に探して、あったものを使う。
(ホントはもっとあるので、詳しくはこちら > テンプレート階層)
1. のファイルを用意せずに、2.や3.のファイル内で if文を使って分岐させることもできる。
カテゴリーアーカイブを開いたとき、そのカテゴリーによって変える場合、
<? php
if(is_category(’43’)) {
ここに?cat=43のときの処理
} else {
その他のときの処理
}
?>
1つの投稿(?p=)を開いたとき、その投稿が属するカテゴリーによって変える場合、
<? php
if(in_category(’43’)) {
ここに?cat=43のときの処理
} else {
その他のときの処理
}
?>
is_categoryとin_categoryが違う。
で、処理の部分に、使うヘッダーファイルやサイドバーファイルを指定したりする。
通常のヘッダーファイルは header.php であり、
<? php get_header(); ?>
で呼び出すが、
<? php get_header(’48’); ?>
と書くと、header-48.php が呼び出される。
<? php get_header(‘movie’); ?>
というように文字でもよく、この場合はheader-movie.php が呼び出される。
<?php include (TEMPLATEPATH . ‘/header-movie.php’); ?>
というようにも書けるので、これはheader-TAG.php の形じゃない場合に使えるかな。
WordPress for Android
先ほど入れたのは、ページ閲覧のほうがタッチパネル向きのデザインになるプラグイン。
投稿画面のほうが普通のページのままだったので使いづらい。
Android アプリで 『WordPress』 というものがあったのでインストール。
これは本家が出しているものだな。
起動すると、新規にBlogアカウントを作るか、作ってあるものを登録するか聞かれる。
私はここを編集するのが目的なので、登録に進む。
Blog URL として、WordPress が入っているトップディレクトリを指定する。
Username と Password はログインするために使ってるやつを使用。
リモート用のアカウントを作ってもよかったけど、まぁいいや。
その前に、WordPress側で [設定] ⇒ [投稿設定] から、
「リモート投稿」の項目で「XML-RPC」を有効にしなければならない。
(してなくてもエラーメッセージにそう書いてくれるので親切^^)
あとはアカウントが合っていれば、OK。
複数のブログを登録できるらしいので、たくさん持ってても1アプリ内で使える。
ないけど。
『コメント』『投稿』『ページ』『統計情報』の4項目があるけど、
主に使うのは『投稿』で、たまに『コメント』かな。
WPtouch
WordPressを、Android, iPhone用に最適化してくれるプラグイン。
- http://wordpress.org/extend/plugins/wptouch/ よりダウンロード
- zipファイルを解凍する
- wptouch ディレクトリを、/wp-content/plugins/ にアップロードする
- WordPressのAdmin画面で、[プラグイン]からWPtouchの[使用する]をクリックする
今使ってるWordPressのバージョンでは互換性がないらしい。
でも、古いバージョンを入れたところ、見た目は変わらないように見えたので、
互換性がないと言われながらも、最新版を使うことにした。