アンテナサイトを作ろう!(準備)




1年以上前に更新された記事です。
情報が古い可能性がありますので、注意してください。

まずは、心臓部分である記事取得クローラーを作るその前に、DBやカスタム投稿タイプを作成する。

DBはクローラーを実行する時の引数にサイトURLやカテゴリをDBから取得出来るように。
カスタム投稿タイプは、WordPress本来の機能を失わせない為に作成する。

テーブル作成

プロトタイプ感が強いのであまり深くは考えてないけど、こんな感じのテーブル構成でいいんじゃないかな。
サイト情報テーブルに、サイト名、サイトURL、サイト説明、サイトスラッグ。
カテゴリ変換テーブルに、サイトID、変換前カテゴリ、変換後カテゴリID。

プラグイン初期化時にテーブルチェックして、テーブルが存在しない場合は作成する。

/**
 * プラグインの初期化時
 */
function createCustomPost() {
	$sultanInit = new sultanInit();
	$sultanInit->createDataBase();
}
add_action('init', 'createCustomPost');

class sultanInit {
    /**
     * データベースの作成
     * テーブルが存在しない場合、作成する。
     */
    public function createDataBase() {
        global $wpdb;
        // サイトテーブル
        $tblSiteNameCnt = $wpdb->get_var("select count(*) from $this->tblSiteName");
        if($tblSiteNameCnt === null) {
            $wpdb->query("create table $this->tblSiteName (
                         id int not null primary key,
                         site_name varchar(2048),
                         site_url varchar(2048),
                         description varchar(2048),
                         site_slug varchar(2048))");
        }
        // 変換テーブル
        $tblConvCateCnt = $wpdb->get_var("select count(*) from $this->tblConvCate");
        if($tblConvCateCnt === null) {
            $wpdb->query("create table $this->tblConvCat (
                         id int not null primary key,
                         site_id int not null,
                         b_cat varchar(2048),
                         a_cat int)");
        }
    }
}

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

取得した記事タイトルやリンクなどを格納するのに使用する。
WordPressの記事として格納する事で、WordPress本来の機能であるアーカイブを使用でき、日別やカテゴリ別に出力しやすくなる。

    /**
     * カスタム投稿タイプ、カスタムタクソノミー登録
     */
    public function createPostType() {
        // カスタムタクソノミー作成(記事カテゴリ)
        register_taxonomy(
            'article-category',
            'antnPostType',
            array(
                'label'         => '記事カテゴリ',
                'public'        => true,
                'show_ui'       => true,
                'hierarchical'  => true
            )
        );
        
        // カスタムタクソノミー作成(サイト名)
        register_taxonomy(
            'site-name',
            'antnPostType',
            array(
                'label'         => 'サイト名',
                'public'        => true,
                'show_ui'       => true,
                'hierarchical'  => true
            )
        );
        
        // カスタム投稿タイプ作成
        register_post_type(
            'antnPostType',
            array(
               'labels'                 =>  array(
                                                'name'                  => 'アンテナ', //管理画面などで表示する名前
                                                'singular_name'         => 'アンテナ', //管理画面などで表示する名前(単数形)
                                                'menu_name'             => 'アンテナ', //管理画面メニューで表示する名前(nameより優先される)
                                                'add_new_item'          => '新しいアンテナ', //新規作成ページのタイトルに表示される名前
                                                'add_new'               => '新規追加', //メニューの新規追加ボタンのラベル
                                                'new_item'              => '一覧ページの「新規追加」ボタンのラベル',
                                                'edit_item'             => '編集', //編集ページのタイトルに表示される名前
                                                'view_item'             => '編集', //編集ページの「投稿を表示」ボタンのラベル
                                                'search_items'          => 'アンテナの検索', //一覧ページの検索ボタンのラベル
                                                'not_found'             => '見つかりません。', //一覧ページに投稿が見つからなかったときに表示
                                                'not_found_in_trash'    => 'ゴミ箱にはありません。' //ゴミ箱に何も入っていないときに表示
                                            ),
                'descriptions'          =>  'アンテナの概要', //カスタム投稿ページの概要文
                'hierarchical'          =>  false, //falseの場合、階層構造なし
                'public'                =>  true, //ユーザーが内容を投稿する場合true(通常はtrue)
                'has_archive'           =>  true,  //アーカイブページを作成するか否かを設定(trueでindexページを作成)
                'exclude_from_search'   =>  true, //WPの検索機能から検索した際、検索対象に含めるか否かを設定(※trueの場合は検索対象に含めない)
                'taxonomies'            =>  array('article-category', 'site-name'),
                'supports'              =>  array(//管理画面から投稿できる項目
                                                'title', //タイトル表示を有効に
                                                'editor', //本文の表示を有効に
                                                'thumbnail'
                                            ),
            )
        );
    }

記事のカテゴリとは別にサイト名用のカスタムタームを用意。
これで簡単にサイト別に出力できるようになるはず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です