概要
ネットワークのカスタマイズをしている中で、
- 新しく登録される子ブログで、デフォルトで作成される記事やページをこちら側で決めておきたい(しかも複数)、
- カテゴリやタグも作っておいて作成された記事やページと紐付けておきたい、
という方(いるのかな。。)のためのプラグインです。
管理画面は提供していないので、記事のタイトルやURL、カテゴリなどの名前はソースに書き込む必要があります。
作り
@jim0912さんによるWordPressのマルチサイト利用時に新規サイト作成時の設定・初期データを変更するを参考にして(ありがとうございます!)、ちょこちょこいじってみて出来上がっています。
wp_install_defaults($user_id)
という関数を定義しているだけなのですが、子ブログ生成時にwp-admin/includes/upgrade.phpの中で、wp_install_defaults関数が書かれてまして、if ( !function_exists(‘wp_install_defaults’) ) :と書かれていて、プラグインやfunctions.phpにこの関数がなければ、このファイル内に定義されたwp_install_defaultsが動きますということです。
なので、関数の名前を変えてはいけないです。
あと、できるだけコピペでやった方がいいとのことです。
僕がカスタマイズしたものは、リンクカテゴリー生成部分はどうせ使わないので消してしまいました。また、if ( is_multisite() )とかも消してます。
カスタマイズ
コメントで色々書かれているので、IDやURLやページテンプレート、紐付け関係を指定します。
ダウンロードとインストール
ちょっとテストしているのでお待ちください。
こちらからダウンロードして解凍して、プラグインフォルダに入れて、ネットワークで有効化です。
ソース
素人臭くて恥ずかしいですが、下記がプラグインのソースです。
もっと短くなると思うんですが、これで動いているので。。間違ってたら誰か教えて。。
教える人→@ShinichiNのツイッター。
/* Plugin Name: Default Blog Posts and Taxonomies in WP Network Site Plugin URI: http:nskw-style.com/ Description: マルチサイト、ネットワークの子ブログで、子ブログ生成時に作られる記事、ページ、カテゴリ、タグのデフォルト設定をする。 Version: 1.0 Author: Shinichi Nishikawa Author URI: <a href="https://nskw-style.com/" target="_blank" class="advmk">https://nskw-style.com/</a> */ function wp_install_defaults($user_id) { global $wpdb, $wp_rewrite, $current_site, $table_prefix; // デフォルトのカテゴリーを作る $cat_name = '日記';//カテゴリーの名前 $cat_slug = 'diary';//カテゴリーのスラッグ $cat_id = 1;//設定したいカテゴリーのIDをここに数字で書く。 $cat_description = '日記カテゴリーです。カテゴリーを指定しないで保存すると、このカテゴリになります。'; $wpdb->insert( $wpdb->terms, array('term_id' => $cat_id, 'name' => $cat_name, 'slug' => $cat_slug, 'term_group' => 0) ); $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $cat_id, 'taxonomy' => 'category', 'description' => $cat_description, 'parent' => 0, 'count' => 2));//下の方で記事の作成をする際にこのカテゴリーにひもづけられる記事の数をcount欄で指定しとく。 $cat_tt_id = $wpdb->insert_id; // デフォルトのタグを作る $my_tag_name = 'ワードプレス';//タグの名前 $my_tag_slug = 'wordpress';//タグのスラッグ $my_tag_id = 2;//タグのID(1は上で使っているので、2にする) $my_tag_description = 'WordPressに関する記事です。'; $wpdb->insert( $wpdb->terms, array('term_id' => $my_tag_id, 'name' => $my_tag_name, 'slug' => $my_tag_slug, 'term_group' => 0) ); $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $my_tag_id, 'taxonomy' => 'post_tag', 'description' => $my_tag_description, 'parent' => 0, 'count' => 1)); // デフォルトのタグをもうひとつ作る $my_tag_name_2 = 'ムーバブルタイプ'; $my_tag_slug_2 = 'mt'; $my_tag_id_2 = 3;//ここも上で作ったカテゴリやタグのIDと被らないようにする $my_tag_description_2 = 'MovableTypeに関する記事です。'; $wpdb->insert( $wpdb->terms, array('term_id' => $my_tag_id_2, 'name' => $my_tag_name_2, 'slug' => $my_tag_slug_2, 'term_group' => 0) ); $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $my_tag_id_2, 'taxonomy' => 'post_tag', 'description' => $my_tag_description_2, 'parent' => 0, 'count' => 3)); // 最初の投稿 $now = date('Y-m-d H:i:s'); $now_gmt = gmdate('Y-m-d H:i:s'); $first_post_guid = get_option('home') . '/?p=1';//ここはp=1にしとく。 $first_post = stripslashes( 'これは、<a href="SITE_URL">SITE_NAME</a>に書かれた最初の投稿です。投稿一覧から削除することができます。' ); $first_post = str_replace( "SITE_URL", esc_url( network_home_url() ), $first_post ); $first_post = str_replace( "SITE_NAME", $current_site->site_name, $first_post ); $wpdb->insert( $wpdb->posts, array( 'post_author' => $user_id, 'post_date' => $now, 'post_date_gmt' => $now_gmt, 'post_content' => $first_post, 'post_excerpt' => '', 'post_title' => 'ようこそです!!',//ここにタイトル書き込む 'post_name' => sanitize_title('hello!' ),//スラッグ指定 'post_modified' => $now, 'post_modified_gmt' => $now_gmt, 'guid' => $first_post_guid, 'comment_count' => 1,//コメントの数を入れとく 'to_ping' => '', 'pinged' => '', 'post_content_filtered' => '' )); $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => 1, 'object_id' => 1) );//ここで、term_taxonomy_idに上で定義したカテゴリやタグのIDを入れる。 $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => 3, 'object_id' => 1) );//複数のカテゴリやタグに紐付け長ければ2行書く。ホントはもっといい書き方がある? // 2番目の投稿 $now = date('Y-m-d H:i:s'); $now_gmt = gmdate('Y-m-d H:i:s'); $second_post_guid = get_option('home') . '/?p=2';//2にしてます。 $second_post = stripslashes( 'これは、<a href="SITE_URL">SITE_NAME</a>に書かれた2番目の投稿です。<br />投稿一覧から削除することができます。' ); $second_post = str_replace( "SITE_URL", esc_url( network_home_url() ), $second_post ); $second_post = str_replace( "SITE_NAME", $current_site->site_name, $second_post ); $wpdb->insert( $wpdb->posts, array( 'post_author' => $user_id, 'post_date' => $now, 'post_date_gmt' => $now_gmt, 'post_content' => $second_post, 'post_excerpt' => '', 'post_title' => '2番目の記事だよ。', 'post_name' => sanitize_title('hello-again!' ), 'post_modified' => $now, 'post_modified_gmt' => $now_gmt, 'guid' => $first_post_guid, 'comment_count' => 0, 'to_ping' => '', 'pinged' => '', 'post_content_filtered' => '' )); $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => 1, 'object_id' => 2) ); $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => 2, 'object_id' => 2) ); //ページを作成する $first_page = "";//ページの本文ここに。 $first_page_guid = get_option('home') . '/?page_id=3';//3にしてるよ $wpdb->insert( $wpdb->posts, array( 'post_author' => $user_id, 'post_date' => $now, 'post_date_gmt' => $now_gmt, 'post_content' => $first_page, 'post_excerpt' => '', 'post_title' => 'タイトルいれとく', 'post_name' => sanitize_title('スラッグをここに' ), 'post_modified' => $now, 'post_modified_gmt' => $now_gmt, 'guid' => $first_page_guid, 'post_type' => 'page',//ここがページになってる 'to_ping' => '', 'pinged' => '', 'post_content_filtered' => '' )); $wpdb->insert( $wpdb->postmeta, array( 'post_id' => 3, 'meta_key' => '_wp_page_template', 'meta_value' => 'xxx.php' ) );//meta_valueには、ページのテンプレートの名前です。 $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => 3, 'object_id' => 3) ); // たとえば掲示板ページ $board_page = "掲示板"; $board_post_guid = get_option('home') . '/?page_id=4'; $wpdb->insert( $wpdb->posts, array( 'post_author' => $user_id, 'post_date' => $now, 'post_date_gmt' => $now_gmt, 'post_content' => $board_page, 'post_excerpt' => '', 'post_title' => __( '掲示板' ), 'post_name' => sanitize_title('スラッグをここに入れる' ), 'post_modified' => $now, 'post_modified_gmt' => $now_gmt, 'guid' => $board_post_guid, 'post_type' => 'page', 'to_ping' => '', 'pinged' => '', 'post_content_filtered' => '' )); $wpdb->insert( $wpdb->postmeta, array( 'post_id' => 4, 'meta_key' => '_wp_page_template', 'meta_value' => 'board.php' ) );//テンプレートを掲示板用に作ったり。。 $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => 3, 'object_id' => 4) ); // この辺は、デフォルトのウィジェットを設定しているところです。まだ研究中なので、そのままになっています。 update_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); update_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); update_option( 'widget_recent-comments', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); update_option( 'widget_archives', array ( 2 => array ( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); update_option( 'widget_categories', array ( 2 => array ( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); update_option( 'widget_meta', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); update_option( 'sidebars_widgets', array ( 'wp_inactive_widgets' => array ( ), 'primary-widget-area' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'secondary-widget-area' => array ( ), 'first-footer-widget-area' => array ( ), 'second-footer-widget-area' => array ( ), 'third-footer-widget-area' => array ( ), 'fourth-footer-widget-area' => array ( ), 'array_version' => 3 ) ); if ( is_multisite() ) { // Flush rules to pick up the new page. $wp_rewrite->init(); $wp_rewrite->flush_rules(); $user = new WP_User($user_id); $wpdb->update( $wpdb->options, array('option_value' => $user->user_email), array('option_name' => 'admin_email') ); // Remove all perms except for the login user. $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'user_level') ); $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'capabilities') ); // Delete any caps that snuck into the previously active blog. (Hardcoded to blog 1 for now.) TODO: Get previous_blog_id. if ( !is_super_admin( $user_id ) && $user_id != 1 ) $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $wpdb->base_prefix.'1_capabilities') ); } }
コメント
コメント一覧 (1件)
[…] ークで、子ブログに複数の投稿やページを設定、作っておいたカテゴリやタグを紐付けておくためのプラグイン https://nskw-style.com/2011/wordpress/customize/multisite-child-blog-default-posts-and-taxonomies.html […]