관리자 화면 글 목록에 내 글만 표시하기


워드프레스 관리자 화면의 글 목록에서는 기본적으로 모든 글이 우선 표시되고 자신의 글이 아니거나 수정할 수 없는 글에는 ‘편집’ 링크 없이 ‘보기’ 링크만 제공됩니다.

프로젝트 진행을 하다보면 글 목록 자체에 ‘로그인한 사람의 글’만 보여지길 원하는 경우가 종종 있는데요, 이는 정상적인 방법으로는 해결이 어려운 내용입니다.

이를 적용하기위해서는 약간의 트릭이 필요한데요, 기본으로 워드프레스에서 제공하는 ‘내 글’ 보기 링크를 응용한 것입니다.

list-posts-views

(Mine 에 대한 번역이 ‘자료’로 되어있군요… 번역 수정 신고도 해야겠습니다.)

이 링크의 주소(URL)을 살펴보면 author=xxxx 라는 형식의 질의문이 포함되어 있습니다. 즉, 이 질의문만 있으면 ‘내 글만’ 보이게 되는 것입니다.

이를 활용해서 ‘load-edit.php’ 후크에 함수(function)을 등록하여 글 목록 페이지 자체에 ‘내 글’ 만 보이도록 트릭을 걸 수 있습니다.

<?php
/*
Plugin Name: Show My Posts Only
Plugin URI: http://082net.com/tag/my-posts-only
Description: 글 관리 화면에서 내 글만 보이게 하기(관리자/편집자 제외)
Version: 0.1
Author: Choen, Youngmin
Author URI: http://082net.com/
*/

namespace CYM;

add_action('load-edit.php', 'CYM\show_my_posts_only');


function show_my_posts_only() {
  $screen = convert_to_screen();
  $post_type = $screen->post_type;
  $caps = get_post_type_object($post_type)->cap;

  if ( !current_user_can( $caps->edit_others_posts ) ) {
    add_filter( "views_{$screen->id}", 'CYM\show_my_posts_only_views' );

    if ( !isset($_REQUEST['author']) ) {
      $_REQUEST['author'] = $_GET['author'] = get_current_user_id();
    }

    if ( isset($_REQUEST['all_posts']) && $_REQUEST['all_posts'] == '1' ) {
      unset($_REQUEST['all_posts']);
    }
  }
}

function show_my_posts_only_views($views) {
  if ( isset($views['mine']) && isset($views['all']) ) {
    // Mine 보기가 있으므로 All 삭제해도 무방
    unset($views['all']);
  } elseif ( isset($views['all']) ) {
    // All count to zero
    $views['all'] = preg_replace('|<span class="count">\(\d+\)</span>|i', '<span class="count">(0)</span>', $views['all']);
  }
  return $views;
}

플러그인으로 만들어 올려두었으니 필요한 분들은 활용하세요.

my-posts-only-v0.1.zip