2017年9月18日月曜日

Wordpressでインポートした投稿を区別するためにカスタム投稿タイプを利用した

カスタム投稿タイプ側にインポートしたときの記録

どうやってスマートに通常投稿とインポートした投稿を視覚的に区別するか

Wordpressで現ブログを運営しているところへ旧ブログをインポートしたときに旧ブログであったことを背景色とかで区別しようと思った。
となると現ブログと旧ブログをどのように判定したらいいのか。一番簡単なのは投稿日時で判定することだろう。
でもそれだと現ブログですでに公開した投稿だけでなく今後公開する未来の投稿でも判定することになる。この程度なら技術的にも速度的にもほとんど問題ないだろうけどなんかかっこわるいので避けたかった。

カスタム投稿タイプを使うというアイデア

なんかいい方法はないかなとぼんやり考えているうちに時間は過ぎていった。そしてあるときひらめいた。
カスタム投稿タイプを使えばいいんじゃないか。
そうすればテンプレートファイルはカスタム投稿タイプ専用のをWordpressのシステムが自動的に選択して使うので旧ブログかどうかの判定は必要ない。(あとから考えたらWordpressがカスタム投稿タイプかどうかの処理はあるけど)

これならカスタム投稿タイプのときだけのCSSファイルを追加で読み込んで必要な部分だけ色などを変えればいいじゃない。

とこのときは思ったんだけど実際やってみたらそう簡単な話ではなかった。それはおいおい書く予定。

作業した内容

いったん通常投稿とインポートする

このとき現ブログの延長としてすでに旧ブログをインポートしていた。ただ旧ブログは公開状態にしていなかった。カテゴリーとタグを現ブログにあうようにひとつひとつ調整はしていた。

カスタム投稿タイプを使うことにしたので、このすでにインポートしていた旧ブログの投稿をあとでエクスポートして使うことになる。

カスタム投稿タイプの作成

Wordpressでカスタム投稿タイプを使うにはfunction.phpに以下のようなコードを追加すればいいのだけど今回はプラグイン形式にした。これは単にやってみたかったからというだけの理由。自分しか使わないので必要最小限の記述。
function.phpではなくWordpressのプラグインディレクトリにそれなりのファイル名.phpで置いてからWordpressのプラグインメニューから有効化する。

/**
 * Plugin Name: Oldblog Post Type
 * Description: Custom Post Type for Old blog
 * Author:      kenji2199
 * Version:     0.1
 */
// ********************************
// カスタム投稿タイプ'densan'を設定
// ********************************
function create_post_type_oldblog() {
 // **********************
 // 旧ブログ専用投稿タイプ
 register_post_type(
   'oldblog',
   array(
     'label' => '旧ブログ',
     'description' => '旧ブログからインポートした投稿',
     'public' => true,
//     'show_in_nav_menus' => false,
    'show_in_admin_bar' => false,
     'has_archive' => true,
     'supports' => array('title', 'editor', 'excerpt', 'author', 'comments'),
     'menu_position' => 5,
     'taxonomies' => array('oldblog_cat', 'oldblog_tag'),
   )
 );

  // ********************
  // 旧ブログ専用カテゴリ
  register_taxonomy(
    'oldblog_cat',
    'oldblog',
    array(
      'label' => 'カテゴリー',
      'description' => '旧ブログ用のカテゴリー',
      'hierarchical' => true,  // trueなので階層あり、つまりカテゴリ
      'public' => true,
//      'show_ui' => true,
//      'show_in_nav_menus' => false,
      'show_admin_column' => true,
      'show_tagcloud' => false,
      'update_count_callback' => '_update_post_term_count',
    )
  );

  // ****************
  // 旧ブログ専用タグ
  register_taxonomy(
    'oldblog_tag',
    'oldblog',
    array(
      'label' => 'タグ',
      'description' => '旧ブログ用のタグ',
      'hierarchical' => false, // falseなので階層なし、つまりタグ
      'public' => true,
//      'show_ui' => true,
//      'show_in_nav_menus' => false,
      'show_admin_column' => true,
      'show_tagcloud' => false,
      'update_count_callback' => '_update_post_term_count',
    )
  );
}
add_action('init', 'create_post_type_oldblog');

本来はきちっとパラメータを設定するのが正しいのだろうけど個人ブログであり自分しか使わないのでこれで十分。
基本的にデフォルトの値で十分なところは記述せず、ほんとに最低限必要なところだけ書いている。でもpublicだけは一応明示した。

カスタム投稿タイプの投稿管理画面

あとカスタム投稿タイプの設定の仕方を調べていくと管理画面にカテゴリとタグが表示されないので追加する方法という記事が見つかった。それもしないといけないかなと思ったけれど公式の regsiter_taxonomy() のパラメータの説明に show_admin_column を trueにすれば表示されるとあったのでそれを使った。
ただこれだとカテゴリーとタグの幅が広くてタイトルの幅がちょっと狭くなる。なにか調整する方法はあるとは思うけど今回の旧ブログ用のカスタム投稿タイプに新たに記事を追加しないのでそのままとした。

カスタム投稿タイプへインポートできるようにデータを修正

うまく行ったら今度は旧ブログをインポートする。すでに通常の投稿としてインポートしてあった旧ブログデータをエクスポートする。
それをそのままインポートしても元に戻るだけでカスタム投稿タイプ側にインポートされないのでエクスポートしたデータを少しいじる必要がある。

エクスポートしたファイルは .xml なのでテキストエディタでいくつか修正する。
まずはカスタム投稿タイプへインポートされるように CDATA[post] を CDATA[oldblog] に変更する。
<wp:post_type><![CDATA[post]]></wp:post_type>
↓
<wp:post_type><![CDATA[oldblog]]></wp:post_type>
さらにカテゴリーとタグもカスタム投稿タイプ側になるように修正する。
<category domain="post_tag" nicename="abc"><![CDATA[エービーシー]]></category>
<category domain="category" nicename="xyz"><![CDATA[エクスワイゼト]]></category>
<category domain="oldblog_tag" nicename="def"><![CDATA[デーイーエフ]]></category> <category domain="oldblog_cat" nicename="uvw"><![CDATA[ユブイダブル]]></category>
これらはエディタの置換機能であっという間ですね。
こうして修正したデータをWordpressにインポート。

コメントがインポートされない

ただコメントがインポートされなかった。通常の投稿タイプだとコメントもインポートされたんだけに残念。コメントは基本あきらめることになる。
ただ数が少なければコピー&ペーストで入力したあと管理画面のコメントから日時・作成者・メールアドレスを修正することで再現できる。入力したIPアドレスはここから修正はできないけど。

インポートは終了し後は調整だけのはずだった

あとは通常の投稿タイプの方にインポートした投稿を削除したらとりあえずの作業は終了。
あとはCSSの追加だけ… と思ったら考慮不足があったし、その先もまたいろいろやることがあって大変だった。

次回に続く…



0 件のコメント:

コメントを投稿