$settings[ $key ] );
$settings = aaih__item_validation( $settings );
return $settings[ $key ];
}else {
aaih__popup_alert( 'aaih__get_item - key: ' . $key );
}
}
else {
// $key 指定なし
if ( 'version_up' !== $state ) {
$settings = aaih__item_validation( $settings );
}
return $settings;
}
}
/**
* プラグインタイトル表示(H1)
*
* - 日本語とその他言語で表示を分ける(日本語だけ特別に日本語訳のタイトルも表示)
* - ページタイトルは echo(プラグイン設定画面、カスタムフィールドの表示でも使う)
* - 設定に使う場合は 文字列を返す
*
* @param string $language
* @param string $type ページタイトル時は 'page_title'
* @return void | string タイトル文字列
*/
function aaih__get_plugin_name( $language , $type ='' ) {
if ( 'page_title' === $type ) {
if ( 'ja' === $language ) {
echo AAIH__PLUGIN_NAME . '( ' . AAIH__PLUGIN_NAME_JA . ' )';
}
else {
echo AAIH__PLUGIN_NAME;
}
}
else {
if ( 'ja' === $language ) {
return AAIH__PLUGIN_NAME . '( ' . AAIH__PLUGIN_NAME_JA . ' )';
}
else {
return AAIH__PLUGIN_NAME;
}
}
}
/**
* タブ表示/非表示のclass取得
*
* @return string $tab_class active / passive
*/
function aaih__get_tab_class() {
// 一旦すべて passive に設定
$tab_class = array( 'passive' , 'passive' , 'passive' , 'passive' );
// どのタブを表示するか取得
$current_tab_num = aaih__get_current_tab_num( 'tab_menu_num' );
// 表示するタブのみ active に設定
// 補足:変更を保存時は、その時点のタブを active にする
$tab_class[ $current_tab_num ] = 'active';
return $tab_class;
}
/**
* 現在のタブナンバーを取得
*
* @return int $current_tab_num 現在のタブナンバー 0, 1, 2, 3
*/
function aaih__get_current_tab_num() {
// 変更を保存ボタン押下で保存された タブナンバーを取得
$tab_menu_num = aaih__get_item( 'tab_menu_num' );
// 現在表示するタブナンバーを取得
$current_tab_num = aaih__get_tab_num( $tab_menu_num );
return $current_tab_num;
}
/**
* 保存ボタンの表示
*
* 全てのタブの設定が保存されるため、ちょっと分かりやすく文言変更
*
* @return void
*/
function aaih__show_submit_button() {
$button_name = __( 'Save All Changes' , AAIH__TEXT_DOMAIN );
?>
' . $label . '';
}
// -----------------------------------
// 広告
// -----------------------------------
//スタイル
$style_ad = '';
if ( 'on' === $centering) {
$style_ad = 'style="text-align:center;"';
}
// 広告コードが設定されてなければデバッグ用の文字列表示を返す
// 実際の記事表示では表示されない(プレビューでのデバッグ表示専用)
if ( '' === $ad_code ) {
$msg = $ad_number_th . __( ' is used but no Publisher ID or Ad unit ID input.' , AAIH__TEXT_DOMAIN ) . '
' . __( 'Nothing will be displayed here.' , AAIH__TEXT_DOMAIN );
// が使用されてますが、広告コードの入力がありません。
そのため実際にはここに何も表示されません。';
$ad_code = aaih__debug_msg( $msg , $settings );
$class .= ' no-ad';
}
// -----------------------------------
// 広告表示用のHTML生成
// -----------------------------------
// 公式ディレクトリ登録ではヒアドキュメントの使用は禁止されている
// 改行は「"\n"」というようにダブルクォートで括る必要あり。
$ad_code_html_all = '' . "\n";
$ad_code_html_all .= '
'. "\n";
$ad_code_html_all .= $label . "\n";
$ad_code_html_all .= '
' . $ad_code . '
' . "\n";
$ad_code_html_all .= '
' . "\n";
$ad_code_html_all .= '' . "\n";
return $ad_code_html_all;
}
/**
* post type check
*
* 広告表示の対象の post type かチェックする。
*
* @param string $post_type :'post' , 'page' , 'both'
*
* @return string
* 広告表示する post type の場合 :'selected_post_type'
* 広告表示する post type でない場合 :'not_selected_post_type'
*/
function aaih__post_type_check( $post_type ) {
switch ( $post_type ) {
case 'post':
if ( ! is_single() ) {
return 'not_selected_post_type';
}
break;
case 'page':
if ( ! is_page() ) {
return 'not_selected_post_type';
}
break;
case 'both':
if ( ! is_single() && ! is_page() ) {
return 'not_selected_post_type';
}
break;
default:
$alert_msg = 'aaih__post_type_check: 該当しないケース: '.$post_type;
aaih__popup_alert( $alert_msg );
}
return 'selected_post_type';
}
/**
* Adxx , shortcode_replacexx の Prefix のみゲット
*
* Adxx, shortcode_replacexx の prefix (Ad, shortcode_replace) を取得する。
*
* @param string $prefix_with_num :'Ad1' , 'Ad2' ... , 'shortcode_replace1', 'shortcode_replace2' ....
* @return string $only_prefix :'Ad', 'shortcode_replace'
*
* 関連 :
* preg_replace( $pattern, $replacement, $subject, $limit = -1, &$count = null)
* $subject に対して、pattern で検索を行い replacement に置換
*/
function aaih__get_only_prefix( $prefix_with_num ) {
$only_prefix = preg_replace( '/[0-9]/' , '' , $prefix_with_num );
return $only_prefix;
}
add_action( 'wp_enqueue_scripts', 'aaih__add_css' );
/**
* CSS追加:プレビューのデバッグ情報表示用
*
* プレビュー時におけるデバッグ情報表示用のCSSを追加する。
* アクションフック wp_enqueue_scripts を使用。
* wp_enqueue_style()で ハンドルをまず登録し、wp_enqueue_scriptsでフックする。
*
* @return void
*
* 関連 :
* wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );
* https://developer.wordpress.org/reference/hooks/wp_enqueue_scripts/
* 適切なタイミングでファイルを生成されたページにリンクする
* スクリプトのリンクは、wp_register_script() 関数ですでに登録済みのハンドル、またはこの関数に必要なパラメータを与えることで行える。
*
* wp_enqueue_style()
* https://developer.wordpress.org/reference/functions/wp_enqueue_style/
*
* plugins_url( $path, $plugin )
* pluginsディレクトリーの絶対 URL を取得(末尾のスラッシュなし)
* - $path : pluginsディレクトリーからの相対パス
* - $plugin : __FILE__ を渡せば、$path を現在の PHP スクリプトファイルの親ディレクトリーからの相対パスとして扱える
* https://developer.wordpress.org/reference/functions/plugins_url/
*/
function aaih__add_css() {
$debug_mode_onoff = aaih__get_item( 'debug_mode_onoff' );
// プレビューのデバッグ情報表示用
if ( is_preview() && 'on' === $debug_mode_onoff ) {
wp_enqueue_style( 'aaih__preview_css' , plugins_url( 'css/' . AAIH__MENU_SLUG . '-preview.css' , __FILE__ ) );
}
}
/**
* 国際化対応:翻訳ファイルのロード
*
* 設定値(表示言語の設定)に基づいて翻訳を適用する。
* - 初期値はワードプレスの locale に基づく。
* - 一回でも設定が保存されたら設定値に基づく。
*
* 設定値 'en'以外 : 対象の翻訳ファイルをロード。
* 設定値 'en' : 翻訳ファイルはロードしない。(つまり英語表示)
*
* @return void
*
* 関連: load_textdomain()
* 国際化用ファイル(MOファイル)をロードする
* ロードできた場合:true, 出来なかった場合:false
* https://developer.wordpress.org/reference/functions/load_textdomain/
*/
function aaih__add_translation() {
$language = aaih__get_item( 'language' );
// 英語以外は翻訳ファイルの読み込み
if ( 'en' !== $language ) {
$mofile_path = AAIH__PATH_TO_LANGUAGE . AAIH__TEXT_DOMAIN . '-' . $language . '.mo';
$result = load_textdomain( AAIH__TEXT_DOMAIN , $mofile_path );
if ( false === $result ) {
// 翻訳ファイルがない場合、表示言語は英語になるだけ
}
}
}
/**
* JavaScriptが動作する環境かチェック
*
* @return void
*/
function aaih__javascript_enable_check () {
?>
alert("' . esc_attr( $alert_msg ) . '");';
}
/**
* 入力文字数チェック
*
* 最大文字数内に丸めて返す
*
* @param string $value : 対象の文字列
* @param int $max_length : 文字列の最大文字数
* @return string $value : 最大文字数を超えたところは削除して丸められた文字列
*/
function aaih__length_chk( $value , $max_length ) {
$value = mb_substr( $value , 0 , $max_length , 'UTF-8' );
return $value;
}
/**
* 数値の最大、最小、デフォルトチェック
*
* 設定値に 最小値、最大値、デフォルト値がある場合(例:広告の上下のマージン)
* 値がその範囲内に収まるように調整する。
*
* - 数値以外 : デフォルト値をセット
* - 最大値を超える場合 : 最大値をセット
* - 最小値を下回る場合 : 最小値をセット
*
* @param float $value : 対象の数値
* @param float $init : デフォルト値
* @param float $min : 最小値
* @param float $max : 最大値値
* @return float : 読み出しもとで、int となる場合には int でキャストする
*/
function aaih__check_numeric_min_max( $value, $init , $min , $max ) {
//数字以外の場合:初期値に戻す
if ( ! is_numeric( $value ) ) {
$value = $init;
}
//数字の場合
else {
if ( $value < $min ) { //ゼロ以下はとりあえず制限しておく
$value = $min;
}else if ( $value > $max ) { //上限もとりあえず制限しておく
$value = $max;
}
}
return (float) $value;
}
/**
* Adxx, shortcode_replacexxx の数チェック
*
* 設定値を超えるナンバー(例えば Ad100 の「100」など)になってないか
* 念のためにチェックする関数
*
* @param string $check_name : Ad1, Ad2, ... , shortcode_replace1, shortcode2, ...
* @param string $type : 'Ad', 'shortcode'
* @return string $chk : 設定値内であれば 'OK', それ以外であれば 'NG' を返す
*
* 補足:
* Adxx は設定中に選択があるが、shortcode_replace は選択がないので
* 結果、case 'shortcode' は使わない
*/
function aaih__chk_multiple_variable_name( $check_name , $type ) {
switch ( $type ) {
case 'Ad':
$prefix = 'Ad';
$max = AAIH__AD_CODE_HOW_MANY;
break;
case 'shortcode':
$prefix = 'shortcode_replace_num';
$max = AAIH__SHORTCODE_REPLACE_MAX_NUM;
break;
default:
aaih__popup_alert( 'aaih__chk_multiple_variable_name: no type: ' . $type );
}
// チェック用に最初に 'NG'をセット
$chk = 'NG';
// 設定値内であれば 'OK' をセット
for( $i = 1; $i <= $max ; $i ++) {
$array_name = $prefix . $i;
if ( $array_name === $check_name ) {
$chk = 'OK';
break;
}
}
return $chk;
}
/**
* リセットボタンの表示
*
* - タブ4(言語、その他)のみに表示する。
* - プラグインロード時は 配列 $tab_class の4つ目を class に指定。
* - タブクリックで、js から リアルタイムに class を active / passive 切り替え。
* - 未だ設定値がない場合(初期の場合)には表示しない
*
* @param array $tab_class array( 'passive' , 'passive' , 'passive' , 'passive' );
* @return void
*/
function aaih__show_reset_button( $tab_class ) {
// まだ設定値がなければ表示せずに戻る
if ( ! get_option( AAIH__SETTINGS ) ) {
return;
}
// tab3(言語、その他) が表示されているときのみリセットボタンの表示
$class = $tab_class[3];
/*
* action="" について
*
* action="" では別ファイルを指定し呼び出していたが(必要な処理のみを実行するため)、
* その場合、そのファイルは wordpress 外で動作することになる。
* nonce チェックなどをする場合 wordpress の関数を使う必要があり、そのファイル内で wp-load.php を改めてロードする、
* となり、これは公式ディレクトリにプラグインを登録する場合、セキュリティ面などいくつかの理由からNGとのこと(ワードプレスのレビューチームより)。
* ということで、別ファイル指定はせず、同じファイルに戻ってくるよう(プラグイン内だけの動作で完結するよう)変更した。
*/
?>