「functions.php」タグアーカイブ

WordPressの記事投稿画面で、新規投稿時にタイトルの入力を必須にする WordPress BuddyPressカスタマイズメモ

WordPressログイン画面の「W」のロゴを他の画像に変え、リンク先、マウスホバーの文言変更

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

WordPressに慣れていない人が使うことも想定できるので、タイトルなしのまま新規投稿すると「タイトルなし」となり、ダサいので、タイトル入力を必須にしておこう。


 

functions.php へ記述

WordPressにはタイトルを必須にするような設定はない。

functions.phpに記述して、記事投稿画面にjavascriptで、タイトルが記入されてない時にアラートを出すようにする。

//記事投稿タイトル必須

function required_title() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
if('post' == $('#post_type').val()){
$("#post").submit(function(e){
  if('' == $('#title').val()) {
  alert('タイトルを入力してください');
  $('#ajax-loading').css('visibility', 'hidden');
  $('#publish').removeClass('button-primary-disabled');
  $('#title').focus();
  return false;
  }
});}});
</script>
<?php
}
add_action('admin_head-post-new.php', 'required_title');
add_action('admin_head-post.php', 'required_title');

この例では、新規投稿、投稿の編集でタイトルの入力を必須にしている。

同様に、固定ページ用でもタイトル入力が必須になる。

この記事も読まれています

WordPressメニューの変更、非表示、IDの調べ方「投稿」→「記事」、「コメント」→「あなたの記事へのコメント」へ、メニューの文言変更 WordPress BuddyPressカスタマイズメモ

WordPressのメニューの文言を変更する方法

WordPressのSNSプラグイン、BuddyPressを導入してSNSを構築する場合、「コメント」だけだと自分が書いたコメントなのか、人が自分に対して書いたコメントなのかが分からないのでメニューを変更したい。

今回は、「投稿」→「記事」へ変更。
「コメント」→「あなたの記事へのコメント」に変更する。

 

functions.php へ記述

管理画面のメニューの文言を変更。
ちなみに順番を入れ替えたり、サブメニューの文言を変更したりもできる。

//投稿→記事、コメント→あなたの記事へのコメント

function change_post_label() {
global $menu;
global $submenu;
$menu[5][0] = '記事';
$menu[25][0] = 'あなたの記事へのコメント';
}
add_action( 'admin_menu', 'change_post_label' );
global $sabmenu;

サブメニューを変更しないのであれば、この1行は別になくてもいい。
 

メニューID一覧とサブメニューのID一覧を紹介

メニューとサブメニューのID(key/キー)一覧

$menu[2] // ダッシュボード
  $submenu['index.php'][0] //ホーム
  $submenu['index.php'][10] //更新
$menu[4] // セパレーター(区切り線)
$menu[5]  // 投稿
  $submenu['edit.php'][5] //投稿一覧
  $submenu['edit.php'][10] //新規投稿
  $submenu['edit.php'][15] //カテゴリー
  $submenu['edit.php'][16] //タグ
$menu[10] // メディア
  $submenu['upload.php'][5] //タグ
  $submenu['upload.php'][10] //新規追加
$menu[15] // リンク
  $submenu['link-manager.php'][5] //リンク一覧
  $submenu['link-manager.php'][10] //新規追加
  $submenu['link-manager.php'][15] //リンクカテゴリー
$menu[20] // 固定ページ
  $submenu['edit.php?post_type=page'][5] //固定ページ一覧
  $submenu['edit.php?post_type=page'][10] //新規追加
$menu[25] // コメント
  $submenu['edit-comments.php'][0] //すべてのコメント
$menu[26] // お問い合わせ
$menu[59] // セパレーター(区切り線)
$menu[60] // 外観
  $submenu['themes.php'][5] //テーマ
  $submenu['themes.php'][7] //ウィジェット
  $submenu['themes.php'][10] //メニュー
$menu[65] // プラグイン
  $submenu['plugins.php'][5] //インストール済みプラグイン
  $submenu['plugins.php'][10] //新規追加
  $submenu['plugins.php'][15] //プラグインエディター
$menu[70] // プロフィール
  $submenu['users.php'][5] //ユーザー一覧
  $submenu['users.php'][10] //新規追加
  $submenu['users.php'][15] //あなたのプロフィール
$menu[75] // ツール
  $submenu['tools.php'][5] //利用可能なツール
  $submenu['tools.php'][10] //インポート
  $submenu['tools.php'][15] //エクスポート
$menu[80] // 設定
  $submenu['options-general.php'][10] //一般
  $submenu['options-general.php'][15] //投稿設定
  $submenu['options-general.php'][20] //表示設定
  $submenu['options-general.php'][25] //ディスカッション
  $submenu['options-general.php'][30] //メディア
  $submenu['options-general.php'][35] //プライバシー
  $submenu['options-general.php'][40] //パーマリンク設定
$menu[99] // セパレーター(区切り線)

 

プラグインなどで勝手に追加されるメニューのIDを調べる方法

functions.phpへ

function check_post_label_id() {
    global $menu;
    global $submenu;

    var_dump($menu);
    var_dump($submenu);
}
add_action( 'admin_menu', 'check_post_label_id' );

これを書いて、ページ(ソース)を見ると

array(数字) {[0]->string(数字)"メニューの単語"[1]=>string(数字)"スラッグ"......}

って感じの文字の羅列が見えるので、

“メニューの単語” の前にある array(数字)数字が”メニューの単語”のIDになっている。

管理画面のメニューのアドミンバーの、BuddyPress通知の吹き出しを非表示に WordPress BuddyPressカスタマイズメモ

管理者以外は、プラグイン、ユーザーなどのサブメニューを非表示にする

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

できるだけシンプルにしたいので、管理バーの右上に出てくるBuddyPressの通知の吹き出しを削除したい。


 

functions.php へ記述

//アドミンバーの通知を消す

if (!current_user_can('administrator')) {
remove_action( 'bp_adminbar_menus', 'bp_adminbar_notifications_menu', 8 );
}

“管理者”でもメニューを削除したい場合は、一番上と一番下の

if (!current_user_can('administrator')) {

}

を削除すればいい。

WordPress BuddyPressカスタマイズメモ – サイトフロントのアドミンバー非表示

WordPress(BuddyPress)でユーザー登録した一般ユーザー(投稿者権限)で、管理バー(Adminバー)を非表示にする

<実現したい機能>

・WordpressのSNSプラグイン、BuddyPressのメンバーで、ユーザー登録した一般ユーザー(投稿者権限)にはサイトフロントで管理バーを表示させない。

・管理者としてログインしてる時は見えていていい。

 

functions.php へ記述

サイトフロントでのアドミンバーの非表示は、functions.php に1行書くだけでOK。

if ( ! current_user_can( 'administrator' ) ) { //管理者以外
  add_filter( 'show_admin_bar', '__return_false' );//サイトのアドミンバー非表示
}

管理者でも非表示したいのであれば、

if ( ! current_user_can( 'administrator' ) ) {

}

を削除して、真ん中の1行だけ書いておけばいい。

BuddyPressカスタマイズメモ – ユーザーごとのPVランキングを表示するオリジナルWidgetテンプレートを追加する方法

WordPressにオリジナルのサイドウィジェットの xxxx.php を追加する

<追加したい機能>

WordPressのSNSプラグイン、BuddyPressのメンバーのごとに、記事のPV数を集計して、ウィジェットでランキング表示する。

こんなやつ。

 
<追加の流れ>

・ユーザーごとの投稿PV数を集計して表示する xxxx.php を作って、子テーマフォルダに追加。

・phpファイルを呼び出すために、ショートコード my_add を追加する。

・ウィジェットの「テキスト」でショートコードを許可する。

・ウィジェットエリアに「テキスト」を追加し、そこからオリジナルのウィジェットのファイルである xxxx.php を呼び出す
 

ちなみに、プラグインの「PHP Text Widget」を使って、直接ウィジェットの「テキスト」にPHPコードを書く方法もあるが、これはセキュリティ的にヤバイらしいので、やめておこう。

 

オリジナルウィジェット xxxx.phpファイルの中身

Sangoの「人気記事」ウィジェットをベースにユーザーごとに集計したPV数でランキング表示する。

HTML出力の部分を改造すれば、見た目は自由に変えることができる。

xxxx.php の中身

<?php
    $count_key = 'post_views_count'; //著者一覧を取得
    $users =get_users( array('orderby'=>'ID','order'=>'ASC') ); //全著者ループ
    $count_user = array();
    foreach($users as $user) { //処理するユーザー指定
        query_posts( array ( 'author' => $user->ID, 'posts_per_page' => -1 , 'orderby'=>'ID' , 'order'=>'ASC' ) ); //各著者の投稿ループし、アクセス数を計算
        while ( have_posts() ) {
            the_post();
            $post_count = get_post_meta( get_the_ID(), $count_key, true ); //投稿のアクセス数を取得
            if ($post_count <> '') {
                $count_user[$user->ID]=$count_user[$user->ID] + $post_count; //投稿のアクセス数をインクリメント(+1)
            }
        }
    }
    arsort($count_user,SORT_NUMERIC);
    //昇順ソート結果を出力(5個出力の場合)
    $disp_count=5;
    $n=0;
    foreach ($count_user as $userid => $val) {
        $thisUser = get_userdata( $userid );
echo "<ul id=\"members-list\" class=\"item-list\" aria-live=\"polite\" aria-relevant=\"all\" aria-atomic=\"true\"><li class=\"vcard\"><div class=\"item-avatar\"><a href=\"" . home_url() . "/author/" . $thisUser->user_login . "\">" . get_avatar( $userid, 50 ) . "</a></div><div class=\"item\"><div class=\"item-title fn\"><a href=\"" . home_url() . "/author/" . $thisUser->user_login . "\">" . $thisUser->display_name . " さん " . "</a></div></div>";
echo "<div class=\"item views\"><div class=\"item-title fn\"><p class=\"views\"> Total: ". $val . " views" . "</p></div></div></li></ul>"; //HTML出力見た目はSangoのウィジェットに似るように
        $n++;
        if ($n == $disp_count) {break;}
    }
    wp_reset_query();
?>

 

FTPでアップロード

Sangoの子テーマフォルダ(sango-theme-child)の中にtemplateフォルダを作り、その中にオリジナルの xxxx.php をアップロードしておく。

ここでは、wp-content/themes/sango-theme-child/template 。

場所やフォルダ名は、次の functions.php の記述で決めれる。

 

functions.php への記述

ウィジェットでショートコード使用を許可して、自分のショートコード my_add の働きを指定しておく。

add_filter('widget_text', 'do_shortcode'); //サイトフロントのサイドバーにテンプレート追加するため、widgetのテキストでショートコードを使えるように

function Include_my_php($params = array()) {
    extract(shortcode_atts(array(
        'file' => 'default'
    ), $params));
    ob_start();
    include(STYLESHEETPATH . "/template/$file.php"); //子テーマのtemplateフォルダの中のファイルを読み取る
    return ob_get_clean();
} 
add_shortcode('my_add', 'Include_my_php'); //ショートコード my_add を追加

 

ウィジェットの「テキスト」へのショートコードの記述

functions.php で追加したショートコードを使って、「テキスト」ウィジェットでオリジナルのphpを呼び出す。

[my_add file='xxxx']

でOK。 .php は不要。