ユーザー一覧ページのカスタマイズ【WordPress】

WPダッシュボードのユーザー一覧ページを下記の通りカスタマイズした時のメモ。

  1. WP上で自動に付けられるユーザーIDを表示させたい
  2. ニックネームを表示させたい
  3. 氏名は不要
function add_users_columns( $columns ) {
    $columns['ID'] = 'ID';
    $columns['columns_nickname'] = 'ニックネーム';
    unset($columns['name']);
    $sort_number = array(
        'ID' => 0,
        'username' => 1, //ユーザー名
        'columns_nickname' => 2, //ニックネーム
        'email' => 3, //メールアドレス
        'role' => 4, //権限グループ
        'posts' => 5 //投稿
    );
    $sort = array();
    foreach($columns as $key => $value){
        $sort[] = $sort_number{$key};
    }
    array_multisort($sort,$columns);
    return $columns;
}
function add_users_custom_column( $dummy, $column, $user_id ) {
    if ( $column == 'ID' ) {
        $user_info = get_userdata($user_id);
        return $user_info->ID;
    }
    if ( $column == 'columns_nickname' ) {
        $user_info = get_userdata($user_id);
        return $user_info->nickname;
    }
}
add_filter( 'manage_users_columns', 'add_users_columns' );
add_filter( 'manage_users_custom_column', 'add_users_custom_column', 10, 3 );

カスタム投稿タイプの追加・ユーザー登録すると自動的にユーザー専用の非公開ページとリンクが作成される【WordPress】

メンバーを追加したら自動でそのメンバー専用ページ(カスタム投稿)が作られるようにした時のメモ。

STEP1:まずはカスタム投稿タイプを設定する。(function.php)

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'member', // 投稿タイプ名の定義
                       array(
                           'labels' => array(
                               'name' => __( '会員' ), // 表示する投稿タイプ名
                               'singular_name' => __( '会員' )
                           ),
                           'public' => true,
                           'show_in_rest' => true, // Gutenbergを有効にする
                           'menu_position' =>5,
                           'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields' ,'comments' ),
                       )
                      );

STEP2:ユーザー登録すると自動的に非公開ページが作成される(function.php)

function create_user_page ( $user_id ) {
    $user_info = get_userdata($user_id);
	$user_name = $user_info->user_login;
    $new_page = array(
        'post_type' => 'member',
        'post_title' => $user_name,
        'post_name' => $user_name,
        'post_status' => 'private', // ページは非公開にする
        'post_author' => $user_id,
    );
	wp_insert_post($new_page);
}
add_action('user_register', 'create_user_page' );

STEP3:そのページに自動的にリンクが貼られる(任意のテンプレート)

<a href="/member/<?php $user = wp_get_current_user();
         echo $user->get('user_login'); ?>/">リンクテキスト</a>

投稿欄のフォーマットから「見出し1」と「整形済みテキスト」を削除【WordPress】

投稿欄のフォーマットから「見出し1」と「整形済みテキスト」を削除

function custom_editor_settings( $initArray ){
    $initArray['block_formats'] = "見出し2=h2;見出し3=h3;見出し4=h4;見出し5=h5;見出し6=h6;段落=p;";
    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'custom_editor_settings' );

 

Googleアドセンスの広告をボタン1つで記事内に設置できるようにする(プラグイン無し)【WordPress】

アドセンスの広告を記事内に自由に簡単に設置できるようにするためのコード。
functions.phpファイルに下記を追加。

まずはショートコードを作成

<?php
//ショートコード
function adsdisplay_shortcode( $atts ) {
  return 'ここにアドセンスの広告コードを貼る';
}
add_shortcode( 'ads_displayA', 'adsdisplay_shortcode' );
?>

クイックタグを設置

<?php
//投稿クイックタグ
function add_qtag() {
    if (wp_script_is('quicktags')){
?>
        <script type="text/javascript">
        QTags.addButton('adsdisplay','ディスプレイ広告1','[ads_displayA][/ads_displayA]','','','adsenseディスプレイ広告挿入',1);
    
        </script>
<?php
    }
}
add_action('admin_print_footer_scripts','add_qtag');
?>

タグに紐付けされた投稿の呼び出し:1件目は最新記事、2件目以降はランダムに表示【WordPress】

タグに紐付けされた記事の呼び出しで、1件目は最新記事を取得し、2件目以降はランダムに表示させたいというリクエストがあった時の覚書。

<?php $my_query = new WP_Query( 'category_name=カテゴリー&tag=タグ&posts_per_page=1' ); //指定タグの最新記事1件表示
while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID; ?>
  <?php get_template_part('呼び出すテンプレート'); ?> //処理
<?php endwhile; ?>
<?php $args = array('post__not_in' => $do_not_duplicate, //指定タグに属する記事4件表示 (最新記事1件に表示されている記事は除く)
                    'category_name' => 'カテゴリー',
                    'tag' => 'タグ',
                    'orderby' => 'rand',
                    'posts_per_page' => 4,
);
$my_query = new WP_Query( $args );?>
<?php if ( have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post();
$do_not_duplicate[] = $post->ID;?>
  <?php get_template_part('呼び出すテンプレート'); ?> //処理
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>

「先頭に固定表示」を指定した記事→その記事を除いてループ表示【WordPress】

  1. 表示させたい記事の合計件数を指定
  2. 先頭固定した記事を表示
  3. 先頭固定した記事数を表示させたい記事の合計件数から差し引き→通常のループへ
  4. 通常ループから先頭固定した記事を省き、残りの数の記事を表示
<?php 
$list_cnt = 6; //表示させたい記事の合計件数
$sticky = get_option('sticky_posts'); //先頭固定の記事
if ( !empty($sticky) ) $list_cnt -= count($sticky); //先頭固定の記事がある場合は、その件数を「$list_cnt」の値から引く
if ( count($sticky) > 0 ):
    $the_query = new WP_Query(array(
        'post_type'=> 'post' , 
        'cat'=> 4,
        'post__in' => $sticky,
    ));?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <dl>
            <dt><?php the_title(); ?><span><?php echo get_the_date(); ?></span></dt>
            <dd><?php the_content(); ?></dd>
        </dl>
    <?php endwhile; ?>
<?php endif; ?>
<?php if ( $list_cnt > 0 ): //先頭固定以外の記事の表示
    $the_query = new WP_Query(array(
        'post__not_in' => get_option( 'sticky_posts' ), 
        'post_type'=> 'post' , 
        'cat'=> 4,
        'posts_per_page' => $list_cnt,
        'ignore_sticky_posts' => 1,
    ));?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <dl>
            <dt><?php the_title(); ?><span><?php echo get_the_date(); ?></span></dt>
            <dd><?php the_content(); ?></dd>
        </dl>
    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>