WordPress:カスタムフィールドを利用して自己採点別に記事を管理する方法

ウオトミズ(UOTOMIZU)の中の人
 

完成図

採点機能の完成イメージ 編集画面の採点エリア  

仕様

採点項目は次の3つを採用

  • 「完成度」:記事の完成度。
  • 「可読性」:適切な文言や画像によって読みやすい記事になっているかどうか。
  • 「貢献度」:ユーザーにとって有益かどうか。
  ※増やすことも可能。ただ多すぎると管理画面が情報過多になる。 項目は好きに編集すれば良い。

編集画面で採点項目を固定で表示させる

管理しやすいように固定のカスタムフィールドを設置。  

  • 半角数字の「1」「2」「3」「4」「5」しか使えない。
  • 全角だとのちに実装する検索機能が使えなくなる。
  • 制限をしているわけではないので打ち間違えに注意。
  WordPressのデフォルトの機能の「表示オプション」によって、表示するかどうかも選択できる。 また、採点ボックスの表示箇所は好きなように選べるので、邪魔にならなかったり編集しやすい箇所に設置すれば良い。

記事一覧にて採点結果を表示できる

記事一覧に採点を表示 投稿一覧の採点項目も非表示にすることができる。

絞り込み検索機能を有効にする

絞り込み検索で採点別に記事を検索 スコアを選択することで記事の絞り込みが可能。 記事数が多くても低スコアの記事を見つけやすい。  

固定カスタムフィールドを設置

function.php


 
function add_score_fields() {
  add_meta_box( 'scores', '記事の採点', 'insert_score_fields', 'post', 'side', 'high');
}
add_action('admin_menu', 'add_score_fields');
 
function insert_score_fields() {
  global $post;
  echo '<small>1:不足 2:妥協点 3:及第点 4:ほぼ完璧 5:完璧</small><br>&nbsp;<br>';
  echo '<b>完成度</b> <input type="text" name="perfect" value="'.get_post_meta($post->ID, 'perfect', true).'" size="2" /> ';
  echo '<b>可読性</b> <input type="text" name="readibility" value="'.get_post_meta($post->ID, 'readibility', true).'" size="2" /> ';
  echo '<b>貢献度</b> <input type="text" name="contribution" value="'.get_post_meta($post->ID, 'contribution', true).'" size="2" /> ';
}
 
function save_score_fields( $post_id ) {
  if(!empty($_POST['perfect'])){
    update_post_meta($post_id, 'perfect', $_POST['perfect'] );
  }else{
    delete_post_meta($post_id, 'perfect');
  }
 
  if(!empty($_POST['readibility'])){
    update_post_meta($post_id, 'readibility', $_POST['readibility'] );
  }else{
    delete_post_meta($post_id, 'readibility');
  }
 
   if(!empty($_POST['contribution'])){
    update_post_meta($post_id, 'contribution', $_POST['contribution'] );
  }else{
    delete_post_meta($post_id, 'contribution');
  }
}

各スコアを投稿記事一覧の項目に表示

絞り込み検索機能を有効化する

function.php


//完成度別の絞り込み機能の実装
function restrict_perfect() {
  if ( 'post' == get_current_screen()->post_type ) {
    $key_name = 'perfect';
    $key_value = array( '' => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5' );
    $selected_value = filter_input( INPUT_GET, $key_name);
    $output = '';
    $output .= '<select name="' . esc_attr($perfect) . '">';
    foreach ( $key_value as $value => $text ) {
      $selected = selected( $selected_value, $value, false );
      $output .= '<option value="' . esc_attr($value) . '"' . $selected . '>完成度' . esc_html($text) . '</option>';
    }
    $output .= '</select>';
 
    echo $output;
  }
}
add_action( 'restrict_manage_posts', 'restrict_perfect' );
 
function pre_get_perfect( $query ) {
  if ( is_admin() && 'post' == get_current_screen()->post_type && $query->is_main_query() ) {
    $key_name = 'perfect';
    $key_value = filter_input( INPUT_GET, $key_name );
    if ( strlen( $key_value ) ) {
      $meta_query = $query->get( 'meta_query' );
      if ( ! is_array( $meta_query ) ) $meta_query = array();
      $meta_query[] = array( 'key' => $key_name, 'value' => $key_value );
      $query->set( 'meta_query', $meta_query );
    }
  }
}
add_action( 'pre_get_posts', 'pre_get_perfect' );
 
//可読性別の絞り込み機能の実装
function restrict_readability() {
  if ( 'post' == get_current_screen()->post_type ) {
    $key_name = 'readability';
    $key_value = array( '' => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5' );
    $selected_value = filter_input( INPUT_GET, $key_name );
    $output = '';
    $output .= '<select name="' . esc_attr($key_name) . '">';
    foreach ( $items as $value => $text ) {
      $selected = selected( $selected_value, $value, false );
      $output .= '<option value="' . esc_attr($value) . '"' . $selected . '>可読性' . esc_html($text) . '</option>';
    }
    $output .= '</select>';
    echo $output;
  }
}
add_action( 'restrict_manage_posts', 'restrict_readability' );
 
function pre_get_readability( $query ) {
  if ( is_admin() && 'post' == get_current_screen()->post_type && $query->is_main_query() ) {
    $key_name = 'readablity';
    $key_value = filter_input( INPUT_GET, $key_name );
    if ( strlen( $key_value ) ) {
      $meta_query = $query->get( 'meta_query' );
      if ( ! is_array( $meta_query ) ) $meta_query = array();
      $meta_query[] = array(
      'key' => $key_name,
      'value' => $key_value
    );
    $query->set( 'meta_query', $meta_query );
    }
  }
}
add_action( 'pre_get_posts', 'pre_get_readability' );
 
//貢献度別の絞り込み機能の実装
 
function restrict_contribution() {
  if ( 'post' == get_current_screen()->post_type ) {
    $key_name = 'contribution';
    $key_value = array( '' => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5' );
    $selected_value = filter_input( INPUT_GET, $key_name );
    $output = '';
    $output .= '<select name="' . esc_attr($key_name) . '">';
    foreach ( $key_value as $value => $text ) {
      $selected = selected( $selected_value, $value, false );
      $output .= '<option value="' . esc_attr($value) . '"' . $selected . '>貢献度' . esc_html($text) . '</option>';
    }
    $output .= '</select>';
    echo $output;
  }
}
add_action( 'restrict_manage_posts', 'restrict_contribution' );
 
function pre_get_contribution( $query ) {
  if ( is_admin() && 'post' == get_current_screen()->post_type && $query->is_main_query() ) {
    $key_name = 'contribution';
    $key_value = filter_input( INPUT_GET, $key_name );
    if ( strlen( $key_value ) ) {
      $meta_query = $query->get( 'meta_query' );
      if ( ! is_array( $meta_query ) ) $meta_query = array();
      $meta_query[] = array( 'key' => $key_name, 'value' => $key_value );
      $query->set( 'meta_query', $meta_query );
    }
  }
}
add_action( 'pre_get_posts', 'pre_get_contribution' );
 

終わりに

サイト運営の状況にもよりますが、特にウェブサイト公開初期は、すぐにはインデックスされないので、とりあえず公開してのちにブラッシュアップしていくという方法が有効(だと聞いた)。ただ、数が多くなるにつれて管理がしにくくなる。公開したまま低クオリティー記事を放置しないための試み。   「SEO済みかどうか」だったり、好きにアレンジしても良いかも。   とりあえず動かせるってだけのシンプルな感じです。  

参考記事

以下の記事で解説されているコードを参考にしました。詳細は各記事をご確認ください。   固定カスタムフィールド を作成する方法:https://fit-jp.com/customfield/ カスタムフィールド の検索機能を実装する方法:http://wpcj.net/1779    

.
スポンサーリンク

商用利用可な素材配布しています!!

商用利用可なフリー素材ULOCO商用利用可なフリー素材ULOCO