管理者が承認したときそのレビュー待ち投稿の寄稿者へメールする

検証したけれどフォーラムへコメントする前に、ぴったりなプラグインが公式ディレクトリーで見つかったので陽の目を見なかった不憫な奴です 😛

下記内容をファイル名 gblsm-mail-on-pending-to-publish.php で /wordpress/wp-content/plugins/ へアップロード。

<?php
/*
Plugin Name: gblsm Mail on Pending to Publish
Plugin URI: https://ja.forums.wordpress.org/topic/152881
Description: 管理者がレビュー承認→記事を作成した寄稿者にメール
Author: gblsm
Version: 0.1
Author URI: https://ja.forums.wordpress.org/profile/13907727
*/

function my_mail_on_pending_to_publish( $mypost ) {
  if ( 'post' == $mypost->post_type ) { // 投稿のみ。固定ページ等は対象外。
    $user_id = intval( $mypost->post_author ); // 投稿の作成者のID
    $user_email = get_the_author_meta( 'user_email', $user_id ); // 作成者のメールアドレス
    $subject = '投稿が公開されました'; // メールの件名
    // メールの本文
    $message = 'あなたが ' . $mypost->post_date . ' に寄稿した「' . $mypost->post_title . '」が承認され、公開されました。';
    wp_mail( $user_email, $subject, $message );
  }
}
add_action( 'pending_to_publish', 'my_mail_on_pending_to_publish', 10, 1 );
?>

ショートコード内でカテゴリースラッグを取得

下記内容をファイル名 gblsm-get-recent-posts.php で /wordpress/wp-content/plugins/ へアップロード。

<?php
/*
Plugin Name: gblsm Get Recent Posts
Plugin URI: https://ja.forums.wordpress.org/topic/152113
Description: ショートコード内でカテゴリースラッグを取得
Author: gblsm
Version: 0.1
Author URI: https://ja.forums.wordpress.org/profile/13907727
*/

add_shortcode( 'recent', 'getCatItems' );

//指定した投稿数の最新投稿リストを返す
function getCatItems( $atts ) {
  $atts = shortcode_atts( array( 'num' => 5 ), $atts );
  $num = $atts['num'];

  $separator = ' ';

  $myposts = get_posts( 'numberposts=' . $num . '&order=DESC&orderby=post_date' );

  $retHtml = '<dl>';
  foreach ( $myposts as $p1 ):
    // 投稿のカテゴリースラッグを並べた文字列を作る
    $cats = get_the_category( $p1 );
    $slugs = array();
    foreach( $cats as $c1 ) {
      $slugs[] = $c1->slug;
    }
    $className = implode( ' ', $slugs );

    $retHtml .= '<dt>' . get_post_time( 'Y/m/d', false, $p1 ) . '</dt>';
    $retHtml .= '<dd><span class="' . $className . '">';
    $retHtml .= get_the_category_list( $separator, '', $p1 );
    $retHtml .= '</span>' . get_the_title( $p1 ) . '</dd>';
  endforeach;
  $retHtml .= '</dl>';

  return $retHtml;
}
?>

get_the_cagegory が返すカテゴリー配列をスラッグ順にする

下記内容をファイル名 gblsm-sort-categories-by-slug.php で /wordpress/wp-content/plugins/ へアップロード。

<?php
/*
Plugin Name: gblsm Sort Categories by slug
Plugin URI: https://ja.forums.wordpress.org/topic/152081
Description: get_the_cagegory が返すカテゴリー配列をスラッグ順にする
Author: gblsm
Version: 0.1
Author URI: https://ja.forums.wordpress.org/profile/13907727
*/

add_filter( 'get_the_categories', 'gblsm_sort_categories' );

function gblsm_sort_categories( $cats ) {
  usort( $cats, 'gblsm_sort_by_category_slug' );
  return $cats;
}

function gblsm_sort_by_category_slug( $a, $b ) {
  return strcmp( $a->slug, $b->slug );
}
?>

新規投稿のタイトルを自動生成する

下記内容をファイル名 gblsm-default-post-title.php で /wordpress/wp-content/plugins/ へアップロード。

<?php
/*
Plugin Name: gblsm Default Post Title
Plugin URI: https://ja.forums.wordpress.org/topic/152033
Description: 新規投稿のタイトルを自動生成する
Author: gblsm
Version: 0.1
Author URI: https://ja.forums.wordpress.org/profile/13907727
*/

add_filter( 'default_title', 'my_editor_title', 10, 2 );

function my_editor_title( $post_title, $post ) {
  // 投稿のみ。固定ページ等は対象外。
  if ( 'post' == $post->post_type ) {
    // 例えば 2015/06/16 Tue 19:00
    $post_title = current_time( 'Y/m/d D H:i ' );
    $w = array( '/Mon/', '/Tue/', '/Wed/', '/Thu/', '/Fri/', '/Sat/', '/Sun/' );
    $weekday = array( '(月)', '(火)', '(水)', '(木)', '(金)', '(土)', '(日)' );
    $post_title = preg_replace( $w, $weekday, $post_title );
    // 例えば 2015/06/16 (火) 19:00
  }
  return $post_title;
}
?>

headにmetaタグを追加する

下記内容をファイル名 gblsm-meta-description.php で /wordpress/wp-content/plugins/ へアップロード。

<?php
/*
Plugin Name: gblsm Meta Description
Plugin URI: https://ja.forums.wordpress.org/topic/150700
Description: HTMLのheadセクションにmetaタグのdescriptionを追加します。
Author: gblsm
Version: 0.1
Author URI: https://ja.forums.wordpress.org/profile/13907727
*/

add_action( 'wp_head', 'gblsm_embed_meta_description', 90 );

function gblsm_embed_meta_description() {
  if ( is_single() ) {
    global $post;
    $user_obj = get_userdata( $post->post_author );
    $last_name = $user_obj->last_name;
    if ( empty( $last_name ) )
      $last_name = $user_obj->display_name;
    echo '<meta name="description" content="';
    echo sanitize_text_field( $last_name );
    echo ' - ';
    echo wp_html_excerpt( $post->post_content, 40 );
    echo '">';
  }
}
?>