Simple WP Membershipの各画面カスタマイズ

各画面のプラグインエディタファイル

会員登録画面のHTML出力
simple-membership/views/add.php
会員ログイン画面のHTML出力
simple-membership/views/login.php
会員パスワードリセット画面のHTML出力
simple-membership/views/forgot_password.php
会員プロフィール・変更画面のHTML出力
simple-membership/views/edit.php
各種メッセージや注意文などのHTML出力
simple-membership/classes/class.simple-wp-membership.php
ログインやアクセス制限回りの注意文などのHTML出力
simple-membership/classes/class.swpm-access-control.php
”アカウントを削除”などのボタンHTML出力
simple-membership/classes/class.swpm-utils.php
会員レベルごとのダッシュボードの調整

ダッシュボード出力制御

グローバル変数

global $pagenow;
⇒ダッシュボードで会員が現在表示しているページが代入される変数です。 使い方は、if($pagenow == ‘edit.php’)…など

global $member_rank;
$member_rank = SwpmMemberUtils::get_logged_in_members_level();
⇒Simple WP Membership用に用意した変数です。
SwpmMemberUtils::get_logged_in_members_level()関数でSimple WP Membershipで設定した会員レベルのIDを取得できます。 使い方は、if($member_rank == ‘2’)…など

global $expiry_date
⇒アカウントの有効期限を取得します。
$auth = SwpmAuth::get_instance();
$expiry_date = $auth->get_expire_date();
echo “アカウント有効期限: “.$expiry_date;

Simple WP Membership その他PHP変数の調整

各種関数

current_user_can(‘edit_others_posts’) ⇒現在のユーザー権限の関数です。 edit_others_postsは他ユーザー投稿を編集可能なユーザー権限となるので、上記ではユーザー権限が編集者以上が対象になります。 使い方は、if(current_user_can(‘edit_others_posts’))…など

is_admin ⇒この関数は条件分岐で使用される真偽値型の関数で、ダッシュボードまたは管理画面にログインしているかどうかを判定します。 使い方は、if(is_admin)…など

各アクションフック・フィルターフック

admin_menu
管理画面メニューの基本構造が配置された後に実行。
admin_print_styles
HTML ヘッダーでCSS/スタイルシートを実行。
admin_enqueue_scripts
HTML ヘッダーでプラグインまたはテーマが JavaScript および CSS をすべての管理画面で実行できるようにする。
admin_notices
ネットワーク管理画面・ユーザー管理画面を除く管理画面メニューがページに出力後に実行。
admin_init
管理画面各ページがレンダリングされる前に実行。
admin_print_footer_scripts
JavaScript および CSS をすべての管理画面のbody閉じタグ直前で実行。
pre_get_posts
クエリが実行される前に実行。

[WordPress] 各種URL、PATH取得方法まとめ

定数

URL例 コード 説明
/www/html/wp ABSPATH WordPressのルートディレクトリ
/www/html/wp/wp-content WP_CONTENT_DIR コンテンツディレクトリのフルパス
http://localhost/wp-content WP_CONTENT_URL コンテンツディレクトリのURL
/www/html/wp/wp-content/plugins WP_PLUGIN_DIR プラグインディレクトリのフルパス
http://localhost/wp-content/plugins WP_PLUGIN_URL プラグインディレクトリのURL
/wp-content/uploads UPLOADS マルチサイトのみデフォルトで設定されている。
シングルサイト時は未設定だが自己責任で設定可

関連項目

WordPress ディレクトリ:
home_url() ホーム URL http://www.example.com
site_url() サイトディレクトリ URL http://www.example.com または http://www.example.com/wordpress
admin_url() 管理画面ディレクトリ URL http://www.example.com/wp-admin
includes_url() /en インクルードディレクトリ URL http://www.example.com/wp-includes
content_url() /en コンテンツディレクトリ URL http://www.example.com/wp-content
plugins_url() /en プラグインディレクトリ URL http://www.example.com/wp-content/plugins
wp_upload_dir() /en アップロードディレクトリ URL (配列を返す) http://www.example.com/wp-content/uploads
プラグイン・コンテンツディレクトリを特定する

wpでcron処理をfunctions.php内に設置

// 自動実行用関数
function my_auto_function() {
・・・
処理
・・・
}
add_action ( 'my_auto_function_cron', 'my_auto_function' );

// cron登録処理
if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) {  // 何度も同じcronが登録されないように
  date_default_timezone_set('Asia/Tokyo');  // タイムゾーンの設定
  wp_schedule_event( strtotime('2017-06-29 02:00:00'), 'daily', 'my_auto_function_cron' );
}

プラグイン「WP Crontrol」を組み込むことで、簡単にcron動作状況を確認出来る。

// 自動実行用関数
function my_auto_function() {
  $content = 'テンプレートの内容です';
  $title = 'テンプレートのタイトルです';
  $post = array (
            'post_content' => $content,
            'post_title'   => $title,
            'post_status'  => 'draft',
            'post_type'    => 'post'
          );
  wp_insert_post( $post );
}
add_action ( 'my_auto_function_cron', 'my_auto_function' );

// cron登録処理
if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) {  // 何度も同じcronが登録されないように
  date_default_timezone_set('Asia/Tokyo');
  wp_schedule_event( strtotime('2017-06-30 02:00:00'), 'daily', 'my_auto_function_cron' );
}

秒間隔で実行する

function cron_add_20sec( $schedules ) {
    $schedules['20sec'] = array(
        'interval' => 20,
        'display' => __( '20秒1回' )
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'cron_add_20sec' );

wp_cronは、60秒ごとに起動するので、60秒以下の上記のような設定では、期待通りの動作はしない。

「wp_schedule_event」は、同じことをリピートしたい場合に使います。特に「毎週・毎日・毎時間・毎分」などの場合に使うと便利です。

「wp_schedule_single_event」は、繰り返しがない場合や、変則的なスケジュール(15日後・毎月特定の日など)の場合に使います。

function hoge_function() {
 //
 //実行したい内容
 //
}
add_action ( 'hoge_add_cron', 'hoge_function' );

//cron登録処理
//スケジュール2重登録防止
if ( !wp_next_scheduled( 'hoge_add_cron' ) ) {
 //
 //9時間差がある
 //
 wp_schedule_event( strtotime(date("Ymd 3:00:00")), 'daily', 'hoge_add_cron' );
}

日本時間の朝9時にクーロンを起動したい場合は、-9時間した日付をUNIXタイムで指定する必要があります。例:日本の朝4時に起動させたい場合

strtotime(date('Ymd 19:00:00'));

「wp_schedule_single_event」は最初のarg(日時を指定する変数)に指定した時刻に1度だけスケジュールを実行します。

1度だけ起動するのは、日付を固定日付にした場合で、日付を動的に設定すれば、好きな時に1度だけ起動できるので、リピート起動のようなことができます。

動的にする場合は「mktime」を使うと便利です。

下記の例だと15分ごとにスケジュール起動します。

function hoge_function() {
 //
 //実行したい内容
 //
}
add_action ( 'hoge_add_cron', 'hoge_function' );

//cron登録処理
//スケジュール2重登録防止
if ( !wp_next_scheduled( 'hoge_add_cron' ) ) {
 //
 //9時間差がある
 //
 wp_schedule_single_event( strtotime(date('Ymd H:00:00', mktime(date('H'), date('i')+15, 0, date('m'), date('d'), date('Y')))), 'hoge_add_cron' );//7時
}

毎月15日に起動させたい場合も「wp_schedule_single_event」を使えばできます。

メモ

mktimeで「date(‘m’)+1」と指定しているので、翌月からスタートになります。当月分は自分で起動させる必要があります。

function hoge_function() {
 //
 //実行したい内容
 //
}
add_action ( 'hoge_add_cron', 'hoge_function' );

//cron登録処理
//スケジュール2重登録防止
if ( !wp_next_scheduled( 'hoge_add_cron' ) ) {
 //
 //9時間差がある
 //
 wp_schedule_single_event( strtotime(date('Ymd H:i:s', mktime(0, 0, 0, date('m')+1, 15, date('Y')))), 'hoge_add_cron' );//7時
}

設定で、https::〜にしたらログイン出来なくなったとき

WordPress アドレス (URL)
サイトアドレス (URL)

上記のせっていで、https://〜としたら、ログイン出来なくなったとき

「phpmyadmin」にログインして、「データベース」から修正します。
「wp_options」を選択肢します。
「siteurl」「home」の内容を、https://〜からhttp://〜に変更する。

WordPress管理画面の投稿一覧にスラッグを追加する(固定ページも)

/* 投稿一覧にスラッグ追加 */
function add_posts_columns_slug($columns) { 
    $columns['slug'] = 'スラッグ'; 
    return $columns; 
} 
function add_posts_columns_slug_row($column_name, $post_id) { 
    if( $column_name == 'slug' ) { 
        $slug = get_post($post_id) -> post_name; 
        echo esc_attr($slug); 
    } 
} 
add_filter( 'manage_posts_columns', 'add_posts_columns_slug' ); 
add_action( 'manage_posts_custom_column', 'add_posts_columns_slug_row', 10, 2 );
/* 固定ページ一覧にスラッグ追加 */
function add_page_columns_slug($columns) { 
    $columns['slug'] = 'スラッグ'; 
    return $columns; 
} 
function add_page_column_slug_row($column_name, $post_id) { 
    if( $column_name == 'slug' ) { 
        $slug = get_post($post_id) -> post_name; 
        echo esc_attr($slug); 
    } 
} 
add_filter( 'manage_pages_columns', 'add_page_columns_slug'); 
add_action( 'manage_pages_custom_column', 'add_page_column_slug_row', 10, 2);

wordpress管理画面ログインカスタマイズ

// 管理画面ログイン
function my_login_stylesheet() {
	wp_enqueue_style( 'style-login', get_stylesheet_directory_uri() . '/assets/css/style-login.css' );
}
add_action( 'login_enqueue_scripts', 'my_login_stylesheet' );
function my_login_logo_url() {
	return home_url();
}
add_filter( 'login_headerurl', 'my_login_logo_url' );

WordPressの固定ページ一覧に順序の項目を追加する

function check_post_type_support_page_attr() {
    $all_post_types = get_post_types( array('show_ui' => true ), false );
 
    if ( !isset( $_REQUEST['post_type'] ) ) {
        $edit_post_type = 'post';
    } elseif ( in_array( $_REQUEST['post_type'], array_keys( $all_post_types ) ) ) {
        $edit_post_type = $_REQUEST['post_type'];
    } else {
        wp_die( __('Invalid post type') );
    }
     
    if ( post_type_supports( $edit_post_type, 'page-attributes' ) ) {
        add_filter( 'manage_' . $edit_post_type . '_posts_columns', 'add_menu_order_column' );
        add_action( 'admin_print_styles-edit.php', 'add_menu_order_column_styles' );
        add_filter( 'manage_edit-' . $edit_post_type . '_sortable_columns', 'add_menu_order_sortable_column' );
    }
}
add_action( 'load-edit.php' , 'check_post_type_support_page_attr' );
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
    add_action( 'admin_init', 'check_post_type_support_page_attr' );
}
 
 
function add_menu_order_column( $posts_columns ) {
    $new_columns = array();
    foreach ( $posts_columns as $column_name => $column_display_name ) {
        if ( $column_name == 'date' ) {
            $new_columns['order'] = __( 'Order' );
            add_action( 'manage_pages_custom_column', 'display_menu_order_column', 10, 2 );
            add_action( 'manage_posts_custom_column', 'display_menu_order_column', 10, 2 );
        }
        $new_columns[$column_name] = $column_display_name;
    }
    return $new_columns;
}
 
 
function add_menu_order_sortable_column( $sortable_column ) {
    $sortable_column['order'] = 'menu_order';
    return $sortable_column;
}
 
 
function display_menu_order_column( $column_name, $post_id ) {
    if ( $column_name == 'order' ) {
        $post_id = (int)$post_id;
        $post = get_post( $post_id );
        echo $post->menu_order;
    }
}
 
 
function add_menu_order_column_styles() {
?>
<style type="text/css" charset="utf-8">
.fixed .column-order {
    width: 7%;
    text-align: center;
}
</style>
<?php
}

管理画面の記事一覧項目カスタマイズ

// 固定ページ
add_filter( 'manage_pages_columns', 'add_posts_columns' );
add_action( 'manage_pages_custom_column', 'custom_posts_column', 10, 2 );

// カスタム投稿(「news」というカスタム投稿の場合)
add_filter( 'manage_news_posts_columns', 'add_posts_columns' );
add_action( 'manage_news_posts_custom_column', 'custom_posts_column', 10, 2 );

「cf_example」という名前のカスタムフィールドの値を「投稿」の一覧画面で表示

function add_posts_columns( $columns ) {
  $columns['example'] = 'サンプル';
  return $columns;
}
function custom_posts_column( $column_name, $post_id ) {
  if ( $column_name == 'example' ) {
    $cf_example = get_post_meta( $post_id, 'cf_example', true );
    echo ( $cf_example ) ? $cf_example : '-';
  }
}
add_filter( 'manage_posts_columns', 'add_posts_columns' );
add_action( 'manage_posts_custom_column', 'custom_posts_column', 10, 2 );

表示内容を追加する

//カラムを追加する
function my_columns($columns) {
    $columns['customfield'] = "カスタムフィールド";
    return $columns;
}
//カラムの表示内容を定義
//追加したカラムに「metaname」というカスタムフィールドの内容を表示させる
function add_column($column_name, $post_id) {
    if( $column_name == 'customfield' ) {
        $stitle = get_post_meta($post_id, 'metaname', true);
    }
    if ( isset($stitle) && $stitle ) {
        echo attribute_escape($stitle);
    } else {
        echo __('None');
    }
}
add_filter( 'manage_posts_columns', 'my_columns' );
add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );

表示内容を削除する

function delete_column($columns) {
	
	unset($columns['title'],$columns['author'],$columns['categories']);
	//....のように消したいキーをunset
 
	return $columns;
}
add_filter( 'manage_posts_columns', 'delete_column');

表示順を変更する

// 項目の表示順を変える 固定ページの場合は、manage_pages_columns
add_filter( 'manage_posts_columns', 'sort_posts_columns' );
function sort_posts_columns( $columns ) {
  $columns = array(
    'cb'         => '<input type="checkbox" />',
    'thumbnail'  => 'サムネイル',
    'title'      => 'タイトル',
    'author'     => '作成者',
    'categories' => 'カテゴリー',
    'tags'       => 'タグ',
    'comments'   => '<div class="comment-grey-bubble" title="コメント"></div>',
    'date'       => '日時'
  );
  return $columns;
}

更新通知を非表示にする

【WordPress】アップデート通知を非表示にする
1.WordPressの更新通知を非表示にする //WordPress本体の更新通知をOFFにする add_filter(‘pre_site_transient_update_core’, ‘__return_zero’); remove_action(‘wp_version_check’, ‘wp_version_check’); remove_action(‘admin_init’, ‘_maybe_update_core’); 2.プラグインの更新通知を非表示にする //全てのpluginの更新通知をOFFにする remove_action( ‘load-update-core.php’, ‘wp_update_plugins’ ); add_filter( ‘pre_site_transient_update_plugins’, create_function( ‘$a’, “return null;” ) ); 3.テーマの更新通知を非表示にする //テーマの更新通知をOFFにする remove_action( ‘load-update-core.php’, ‘wp_update_themes’ ); add_filter( ‘pre_site_transient_update_themes’, create_function( ‘$a’, “return null;” ) );