4. 4. 2 投稿作成(簡易版)(2)メタボックス

コメント可否メタボックス, 公開メタボックス(簡易版)

メタボックス 削除・登録

 一般ユーザーが操作を間違えないよう不用なものは削除し、必要なものは簡易版等を登録しています。
 ディスカッションメタボックスを削除し、代わりにコメント可否メタボックスを登録
 公開メタボックスを削除し、代わりに公開メタボックス(簡易版)を登録
 デフォルトのカテゴリメタボックスと作成者メタボックスは別途削除しています。“投稿作成のカスタマイズ(2)”をご覧ください。

コード

// --------------------------------
// メタボックス 削除・登録
// --------------------------------
function hk_easy_post_meta_boxes( $post_type, $context ) {
    if ( ! isset( $_REQUEST['hk_light_type'] ) )                return;
    if (( $post_type != 'post' ) && ( $post_type != 'page' ))   return;
    if ( $context != 'normal' )                                 return;
    // 削除
    remove_meta_box( 'formatdiv',        'post', 'side');       // フォーマット
    remove_meta_box( 'tagsdiv-post_tag', 'post', 'side' );      // タグ
    remove_meta_box( 'postexcerpt',      'post', 'normal' );    // 抜粋
    remove_meta_box( 'commentsdiv',      'post', 'normal' );    // コメント
    remove_meta_box( 'commentsdiv',      'page', 'normal' );    // コメント
    remove_meta_box( 'trackbacksdiv',    'post', 'normal' );    // トラックバック
    remove_meta_box( 'trackbacksdiv',    'page', 'normal' );    // トラックバック
    remove_meta_box( 'slugdiv',          'post', 'normal' );    // スラッグ
    remove_meta_box( 'slugdiv',          'page', 'normal' );    // スラッグ
    remove_meta_box( 'revisionsdiv',     'post', 'normal' );    // リビジョン
    remove_meta_box( 'revisionsdiv',     'page', 'normal' );    // リビジョン
    remove_meta_box( 'postimagediv',     'post', 'side' );      // アイキャッチ画像
    remove_meta_box( 'postimagediv',     'page', 'side' );      // アイキャッチ画像
    remove_meta_box( 'pageparentdiv',    'page', 'side' );      // ページ属性
    remove_meta_box( 'postcustom',       'post', 'normal' );    // カスタムフィールド
    remove_meta_box( 'postcustom',       'page', 'normal' );    // カスタムフィールド
    // ディスカッションメタボックス 削除
    remove_meta_box( 'commentstatusdiv', 'post', 'normal' );
    remove_meta_box( 'commentstatusdiv', 'page', 'normal' );
    // コメント可否メタボックス 登録
    add_meta_box( 'hk_commentstatusdiv', 'コメント可否', 'hk_easy_post_commentstatus_meta_box', null, 'normal', 'high' );
    // 公開メタボックス 削除
    remove_meta_box( 'submitdiv', 'post', 'side' );
    remove_meta_box( 'submitdiv', 'page', 'side' );
    // 公開メタボックス(簡易版)登録
    add_meta_box( 'submitdiv', '公開', 'hk_easy_post_post_submit_meta_box', null, 'side', 'high' );
    return;
}
add_action( 'do_meta_boxes', 'hk_easy_post_meta_boxes', 10, 2 );

コメント可否メタボックス

 ディスカッションメタボックスの代わりです。

コード

// --- メタボックス ---------------
// コメント可否メタボックス
// ORIGINAL:wp-admin/includes/meta-boxes.php function post_comment_status_meta_box($post)
// --------------------------------
function hk_easy_post_commentstatus_meta_box( $post ) {
    echo '<input name="advanced_view" type="hidden" value="1" />'."\n";
    echo '<p class="meta-options">'."\n";
    echo '  <label for="comment_status" class="selectit">'."\n";
    $checked = '';
    if ( $post->comment_status == 'open' )
        $checked = ' checked="checked"';
    echo '    <input name="comment_status" type="checkbox" id="comment_status" value="open"'.$checked.'/> コメントの投稿を許可する。'."\n";
    echo '  </label>'."\n";
    echo '</p>'."\n";
    return;
}

公開メタボックス(簡易版)

 デフォルトの公開メタボックスは、多機能で一般ユーザーが使いやすいものではありません。デフォルトの公開メタボックスをもとに簡易版を作成して使用しています。
 1.削除した機能
   ・ステータスを編集
   ・公開状態
   ・日時を編集
   ・ゴミ箱へ移動
   ・予約投稿
 2.追加した機能
   ・下書きに戻す
 3.その他
   ・プレビューを統一
   ・保存時に表示されるspinner画像を背景画像から通常画像に変更
 spinner画像の変更は、アクセシビリティーを向上させる措置です。ホームページ作成の規格で、重要な画像は背景画像として表示してはいけないとされています。
 下書きに戻す処理で利用しているフックは、独自フックです。“投稿作成のカスタマイズ(3)”をご覧ください。

コード

// --- メタボックス ---------------
// 公開メタボックス(簡易版)
// ORIGINAL:wp-admin/includes/meta-boxes.php function post_submit_meta_box
// --------------------------------
function hk_easy_post_post_submit_meta_box( $post, $args = array() ) {
    $post_type = $post->post_type;
    $post_type_object = get_post_type_object($post_type);
    $can_publish = current_user_can($post_type_object->cap->publish_posts);
    $post_status = $post->post_status;
    // 下書きとして保存・下書きに戻す
    echo '<div class="submitbox" id="submitpost">'."\n";
    echo '  <div id="minor-publishing">'."\n";
    echo '    <div style="display:none;">'."\n";
    echo '      <p class="submit"><input type="submit" name="save" id="save" class="button" value="保存" /></p>'."\n";
    echo '    </div>'."\n";
    echo '    <div id="minor-publishing-actions">'."\n";
    echo '      <div id="save-action">'."\n";
    if (( $post_status == 'draft' ) || ( $post_status == 'auto-draft' ))
        echo '        <input type="submit" name="save" id="save-post" value="下書きとして保存" class="button" />'."\n";
    else
        echo '        <input type="submit" name="save" id="save-post" value="下書きに戻す" class="button" />'."\n";
    echo '        <span class="spinner"><img src="images/spinner.gif" /></span>'."\n";
    echo '      </div>'."\n";
    // プレビュー
    echo '      <div id="preview-action">'."\n";
    $preview_link = esc_url( get_permalink( $post->ID ) );
    echo '        <a class="preview button" href="'.$preview_link.'" target="wp-preview-'.$post->ID.'" id="post-preview">プレビュー</a>'."\n";
    echo '        <input type="hidden" name="wp-preview" id="wp-preview" value="" />'."\n";
    echo '      </div>'."\n";
    echo '      <div class="clear"></div>'."\n";
    echo '    </div><!-- #minor-publishing-actions -->'."\n";
    // ステータス
    echo '    <div id="misc-publishing-actions">'."\n";
    echo '      <div class="misc-pub-section misc-pub-post-status">'."\n";
    echo '        <label for="post_status">ステータス:</label>'."\n";
    if ( $post_status == 'private')
        echo '        <span id="post-status-display">非公開</span>'."\n";
    else if ( $post_status == 'publish')
        echo '        <span id="post-status-display">公開済み</span>'."\n";
    else if ( $post_status == 'future')
        echo '        <span id="post-status-display">予約済み</span>'."\n";
    else if ( $post_status == 'pending')
        echo '        <span id="post-status-display">承認待ち</span>'."\n";
    else    // 'draft' 'auto-draft'
        echo '        <span id="post-status-display">下書き</span>'."\n";
    echo '      </div><!-- .misc-pub-section -->'."\n";
    echo '    </div>'."\n";
    echo '    <div class="clear"></div>'."\n";
    echo '  </div>'."\n";
    // 公開・更新・承認待ちとして保存
    echo '  <div id="major-publishing-actions">'."\n";
    echo '    <div id="publishing-action">'."\n";
    echo '      <span class="spinner"><img src="images/spinner.gif" /></span>'."\n";
    // 'pending' 'draft' 'auto-draft'
    if (( $post_status == 'pending' ) || ( $post_status == 'draft' ) || ( $post_status == 'auto-draft' )) {
        if ( $can_publish ) {
            echo '      <input name="original_publish" type="hidden" id="original_publish" value="公開" />'."\n";
            echo '      <input type="submit" name="publish" id="publish" class="button button-primary button-large" value="公開" />'."\n";
        }
        else {
            echo '      <input name="original_publish" type="hidden" id="original_publish" value="承認待ちとして保存" />'."\n";
            echo '      <input type="submit" name="publish" id="publish" class="button button-primary button-large" value="承認待ちとして保存" />'."\n";
        }
    }
    // 'publish' 'future' 'private'
    else {
        echo '      <input name="original_publish" type="hidden" id="original_publish" value="更新" />'."\n";
        echo '      <input type="submit" name="publish" id="publish" class="button button-primary button-large" value="更新" />'."\n";
    }
    echo '    </div>'."\n";
    echo '    <div class="clear"></div>'."\n";
    echo '  </div>'."\n";
    echo '</div>'."\n";
    return;
}

// --------------------------------
// 公開・更新前処理
//   下書きに戻す
// --------------------------------
function hk_easy_post_insert_post_data( $data, $post_id, $old_post ) {
    if ( isset( $_REQUEST['save'] ) ) {
        if ( $_REQUEST['save'] == '下書きに戻す' )
            $data['post_status'] = 'draft';
    }
    return $data;
}
add_filter( 'hk_func_insert_post_data', 'hk_easy_post_insert_post_data', 15, 3 );

 このプログラムをお使いになる場合は、お使いになる方の自己責任でお願いします。

関連

更新日:2016/03/24
掲載日:2016/01/13