WordPressをWiki風にするために行った設定や導入プラグイン・注意事項色々

Web制作

こんにちは、とみーです。

実は私、このブログ以外にもう1つサイトを持っています。高校時代に作成し絶賛放置中のサイトを。

経年劣化する内容ではないので資産として残してあるのですが…全ページHTMLで作成したため、管理がこの上なく大変でした。

有難いことに不足している情報を提供してくださる方が大勢いらっしゃったのですが、更新は自分しか出来ない。社会人となった自分は時間が取れない。

そんなわけでHTMLからWikiにしようと思ったのですが、日本で慣れ親しまれているPukiWikiは開発がほぼ停止している状態で、セキュリティ面が不安。

そこでWordPressのユーザー権限を利用して、Wiki風に仕上げようと思い立ったわけです。

 

「Wiki化」ではなく、あくまで「Wiki風」なのがポイント。

Wiki化ではないと個人的に考えるポイントは

  • 編集するのにログインが必要
  • 記法がMarkdownでない

大きくこの2つ。

2番目はプラグインを導入すればMarkdown記法にも対応可能ですが、WordPressのエディタがWordっぽくてとっつきやすいので無理にそうする必要はないかな、と。

 

このページではWiki風にするために行った設定を紹介しています。ソースコードがあるものはfunctions.phpに追記すれば動作します。

もう1つのサイトはひっそりこっそりやっていきたいので、スクリーンショットはなしです。ごめんなさい。

スポンサーリンク

テーマの選定…LuxeritasかCocoonがおすすめ

WordPressをWiki風にするわけですが、テーマはなんでもいいわけではありません。

個人的におすすめなのが、このブログでも使っているLuxeritas(ルクセリタス)。またはCocoon(コクーン)。どちらも無料で高性能なテーマです。

私はCocoonにしました。デフォルトで様々な装飾ボックスが搭載されており、利用者の方々にも分かりやすいと思ったので。

参考Luxeritas

参考Cocoon

ログイン画面のロゴとリンクURLを変更

自己満足なのでやってもやらなくても。

デフォルトではログイン画面はWordPressのロゴとWordPress.comへのリンクが貼られています。それを自サイト仕様に変更。

// ロゴの変更
function theme_login_style() { ?>
    <style>
        body.login div#login h1 a {
            background-image: url( "ロゴ画像URL" );
            background-size: contain;
            height: 60px;
            width: 100%;
        }
    </style>
<?php }
add_action( 'login_enqueue_scripts', 'theme_login_style' );

// リンクURLの変更
function theme_login_logo_url() { 
    return esc_url( home_url( '/' ) );
}
add_filter( 'login_headerurl', 'theme_login_logo_url' );

// title属性の変更
function theme_login_logo_url_title() {
    return get_bloginfo( 'name' );
}
add_filter( 'login_headertitle', 'theme_login_logo_url_title' );

参考WordPressのログイン画面のロゴ画像などスタイルを変更する方法

編集者ユーザーを追加

管理者以外に、編集者を追加しました。追加したユーザーは1つで、利用者で共有していただくことに。

参考WordPressのユーザーの種類と権限について

編集者の権限を制限

編集者でも、手を触れて欲しくないところはあります。

そんなわけで権限を縮小・・・もとい、メニューを表示させないようにします。

function remove_admin_setting_menus_editor_role(){
    if ( current_user_can( 'editor' )  ) {
        remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );     // カテゴリーを非表示
        remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );    // タグを非表示
        remove_menu_page( 'link-manager.php' );                                                 // リンクを非表示
        remove_menu_page( 'edit-comments.php' );                                            // コメントを非表示
        remove_menu_page( 'edit.php?post_type=feedback' );                                // フィードバックを非表示
        remove_menu_page( 'profile.php' );                                                            // プロフィール
        remove_menu_page( 'tools.php' );                                                            // ツール
        remove_menu_page( 'gwolle-gb/gwolle-gb.php' );						// Guestbook(プラグイン)
        // 上記コードで非表示になるがURLを知っていればアクセス可能なのでリダイレクトさせる
        global $pagenow;
        if( in_array( $pagenow, array(
            'edit-tags.php?taxonomy=category',
            'edit-tags.php?taxonomy=post_tag',
            'link-manager.php',
            'edit-comments.php',
            'edit.php?post_type=feedback',
            'profile.php',
            'tools.php',
            'gwolle-gb/gwolle-gb.php'
        ) ) )
        wp_redirect( 'index.php' );
    }
}
add_action( 'admin_menu', 'remove_admin_setting_menus_editor_role' );

色々と制限しましたが、要は編集者は

  • 記事の新規投稿
  • 記事の編集
  • 他の人が書いた記事の編集

が可能な設定です。

参考WordPressで編集者の権限の変更

投稿画面で不要なボックスを非表示

投稿画面の、エディタの右側とか下側にある設定ボックス。必要最低限にして表示させないようにしました。

こちらのソースはCocoonの場合ですので、他テーマだとうまく動作しない可能性があります。

function remove_post_supports() {
    if ( current_user_can( 'editor' ) ) {
        remove_post_type_support( 'post', 'author' );            // 作成者
        remove_post_type_support( 'page', 'author' );            // 作成者
        remove_post_type_support( 'post', 'thumbnail' );        // アイキャッチ
        remove_post_type_support( 'page', 'thumbnail' );        // アイキャッチ
        remove_post_type_support( 'post', 'excerpt' );             // 抜粋
        remove_post_type_support( 'page', 'excerpt' );             // 抜粋
        remove_post_type_support( 'post', 'trackbacks' );         // トラックバック
        remove_post_type_support( 'page', 'trackbacks' );         // トラックバック
        remove_post_type_support( 'post', 'custom-fields' );     // カスタムフィールド
        remove_post_type_support( 'page', 'custom-fields' );     // カスタムフィールド
        remove_post_type_support( 'post', 'comments' );         // コメント
        remove_post_type_support( 'page', 'comments' );         // コメント
        remove_post_type_support( 'post', 'page-attributes' ); // ページ属性
        remove_post_type_support( 'page', 'page-attributes' ); // ページ属性
        remove_post_type_support( 'post', 'post-formats' );     // 投稿フォーマット
        remove_post_type_support( 'page', 'post-formats' );     // 投稿フォーマット
    }
}
add_action( 'init', 'remove_post_supports', 20 );

function remove_post_meta_boxes() {
    if ( current_user_can( 'editor' ) ) {
        remove_meta_box( 'slugdiv', 'post', 'normal' );                            // スラッグ
        remove_meta_box( 'slugdiv', 'page', 'normal' );                            // スラッグ
        remove_meta_box( 'commentstatusdiv', 'post' , 'normal' );        // ディスカッション
        remove_meta_box( 'commentstatusdiv', 'page' , 'normal' );        // ディスカッション
        remove_meta_box( 'singular_seo_settings', 'post', 'normal' );    // SEO設定
        remove_meta_box( 'singular_seo_settings', 'page', 'normal' );    // SEO設定
        remove_meta_box( 'custom_css', 'post', 'normal' );                    // カスタムCSS
        remove_meta_box( 'custom_css', 'page', 'normal' );                    // カスタムCSS
        remove_meta_box( 'custom_js', 'post', 'normal' );                    // カスタムJavaScript
        remove_meta_box( 'custom_js', 'page', 'normal' );                    // カスタムJavaScript
        remove_meta_box( 'singular_ad_settings', 'post', 'side' );            // 広告設定
        remove_meta_box( 'singular_ad_settings', 'page', 'side' );            // 広告設定
        remove_meta_box( 'singular_update_settings', 'post', 'side' );    // 更新日の変更
        remove_meta_box( 'singular_update_settings', 'page', 'side' );    // 更新日の変更
        remove_meta_box( 'singular_page_settings', 'post', 'side' );        // ページ設定
        remove_meta_box( 'singular_page_settings', 'page', 'side' );        // ページ設定
        remove_meta_box( 'singular_redirect_settings', 'post', 'side' );    // リダイレクト
        remove_meta_box( 'singular_redirect_settings', 'page', 'side' );    // リダイレクト
        remove_meta_box( 'singular_amp_settings', 'post', 'side' );            // AMP設定
        remove_meta_box( 'singular_amp_settings', 'page', 'side' );            // AMP設定
        remove_meta_box( 'singular_sns_image_settings', 'post', 'side' ); // SNS画像
        remove_meta_box( 'singular_sns_image_settings', 'page', 'side' ); // SNS画像
    }
}
add_action( 'admin_menu', 'remove_post_meta_boxes', 20 );

参考投稿画面から不要な機能を削除する

編集ロックで編集の競合を防ぐ

編集者は2人以上の同時ログインが可能ですし、管理者と編集する記事がかぶってしまうことも想定されます。

WordPressでは2人以上が同時に同じ記事を編集できないようにするため、「編集を引き継ぐ」という機能があります。が、後から来た人が優先されるのはおかしな話。

前に来た人が優先されるよう、編集を引き継ぐボタンを非表示にします。

add_filter( 'override_post_lock', '__return_false' );

参考編集ロック機能で先に投稿画面に入ったユーザーを優先させる

削除できない(ゴミ箱に移動できない)ようにする

せっかく作成したページを勝手に削除されたら困るので、管理者以外は削除禁止にしました。

編集者の方で作成してしまった不要なページがある場合は、一旦下書きにして保存していただき、管理者に連絡する旨をどこかに書いておくことに。

//ゴミ箱に移動する直前に実行する
add_action( "wp_trash_post", "no_delete_page",1,1 );
function no_delete_page($post_id) {
    global $post_type;

    if ( !current_user_can( 'administrator' ) ) {
        if(!strpos(wp_get_referer(), 'notrash=1')){
            $no_trash_flag = '&notrash=1';
        }
        wp_redirect( wp_get_referer() . $no_trash_flag );
        exit();
    }
}
 
//エラーメッセージ表示処理
add_action('admin_notices', 'trash_notice');
function trash_notice(){
    //パラメータがある時にメッセージを表示
    if(strpos(getenv('REQUEST_URI'), 'notrash=1')){
        echo '<div class="message error"><p>選択されたページを削除することはできません。</p></div>';
    }
}

参考WordPressで特定記事などを削除禁止にする方法

メディアのアップロードをできないようにする

メディアのアップロードだけ禁止にして、ライブラリは見れるようにしたかったのですが…私のスキルでは無理っぽくて断念。メディア関係の権限を全て制限してます。

画像を多用するサイトではなかったので…まぁいいか、と。

function remove_theme_caps(){
    $role = get_role( 'editor' );
    $role->remove_cap( 'upload_files' );
}
add_action( 'admin_init', 'remove_theme_caps' );

参考WordPressのユーザーに権限を追加・削除する方法

特定の固定ページを編集できないようにする

プライバシーポリシー等、一部の固定ページは管理者以外編集できないようにしたかったのですが…まだ出来てません。どうやるの。

 

編集についてのページを作成

意外と重要なこの手順。編集方法とか注意書きとかを書いた固定ページを作成しました。

ログインページのリンクと共に、IDとパスワードも書いておきます。

Wiki風サイトのために導入したプラグイン

Wiki風にするために必要だったプラグイン

  • What’s New Generator

更新したページを通知するプラグインです。

「投稿画面で不要なボックスを非表示」で編集者は更新日をいじれないため、絶対的に更新が通知される仕様になってます。

大多数は良識ある方なのですが中にはそうでもない方もおり、悪意ある改変をされた場合いち早く発見できるように導入しました。

あと利用者の利便性向上。

 

  • Gwolle Guestbook

コメント欄を開放しているので何かあれば各ページに書き込んでいただければいいのですが、どのページにも属さないケースがあるためゲストブックを設置。

 

何かあったときのためのプラグイン

  • BackWPup

悪意ある改変をされた場合、リビジョンから復元すれば問題ありません。しかしあまりに多くのページを改変された場合は手におえず。What’s New Generatorも最大30ページまでしか通知してくれませんし。

データベースの情報だけ毎日バックアップしてます。

スポンサーリンク

WordPressをWiki風にするための設定 あとがき

Wiki風としましたが、メディアサイトを立ち上げる場合にも活用できると思います。

何かのお役に立てれば幸いです。

 

ちなみに、完全にWiki化するプラグインもありますが、開発停止してしまってるのでおすすめはしません。

参考WordPressプラグイン「Wiki」を試したいけど見つからない…仕方ないのでダウンロード方法を探ってみた!

スポンサーリンク

おすすめ記事セレクション
シンプルなインテリアを目指す方へ → 買ってよかったホワイトの生活家電・生活用品まとめ
おしゃれな写真は誰でも撮れます → ブログ映えするオシャレな写真撮影&加工テクニック
デキる大人への第一歩 → 私のEvernoteの活用術・10個の事例【初心者でもできる活用法】
意識を変えるだけで貯まる! → 年収300万円のOLが8年で1000万円以上貯めた方法と習慣

この記事を読んだ人は他にこんな記事も読んでいます