admin-ajax.php 403 (Forbidden)
-
<?php /* Plugin Name: Scroll Banner Plugin Description: スクロール調整でバナーを表示し、メディアライブラリーから選択できるプラグイン Version: 1.0 Author: SANO */ // プラグインのディレクトリパス $plugin_dir_path = plugin_dir_path(__FILE__); // プラグインのバージョン $plugin_version = '1.0'; function scroll_banner_plugin_init_option() { // プラグイン初期化の処理を行う if (!get_option('scroll_banner_dynamic_scroll_start')) { // オプションが存在しない場合に初期値を設定 add_option('scroll_banner_dynamic_scroll_start', 200); } // フラグを追加して有効ならプラグイン機能を実行 if (get_option('scroll_banner_plugin_enabled', true)) { // プラグインの追加機能をここに追加 } } // 他のプラグイン関連のコードや関数など... register_activation_hook(__FILE__, 'scroll_banner_plugin_init_option'); class ScrollBannerPlugin { // コンストラクタ public function __construct() { // フロントエンドでのバナー制御 // add_action('wp_footer', array($this, 'control_sticky_banner')); // コンテンツにバナーを追加 add_filter('the_content', array($this, 'add_sticky_banner_to_content')); // 管理メニューにバナー設定を追加 add_action('admin_menu', array($this, 'add_sticky_banner_menu')); // 管理画面設定の初期化 add_action('admin_init', array($this, 'sticky_banner_settings_init')); // カラーピッカーの初期化 add_action('admin_footer', array($this, 'initialize_color_picker')); // Ajaxでオプションを保存 add_action('wp_ajax_save_option_via_ajax', array($this, 'save_option_via_ajax')); add_action('wp_ajax_nopriv_save_option_via_ajax', array($this, 'save_option_via_ajax')); // Ajaxレスポンスを処理するアクションフック //add_action('wp_ajax_save_selected_banner_id', array($this, 'save_selected_banner_id')); //add_action('wp_ajax_nopriv_save_selected_banner_id', array($this, 'save_selected_banner_id')); // Ajaxを読み込ませるアクションフック add_action('wp_ajax_save_user_hide_banner_option', array($this, 'save_user_hide_banner_option_callback')); //add_action('wp_ajax_new_banner_image', array($this, 'new_banner_image_callback')); /* ダイナミックスクロールのスタートの位置 */ // ログインユーザーによるAjaxリクエストを処理するアクションフック add_action('wp_ajax_get_dynamic_scroll_start', array($this, 'dynamic_scroll_threshold_callback_server')); // 非ログインユーザーによるAjaxリクエストを処理するアクションフック ユーザーがログインしていない場合に実行 add_action('wp_ajax_nopriv_get_dynamic_scroll_start', array($this, 'dynamic_scroll_threshold_callback_server')); /* チェックマークボタンの表示と非表示 */ // クライアントサイドでのAjaxリクエストを処理するアクションフック add_action('wp_ajax_get_dynamic_scroll_start_client', array($this, 'dynamic_scroll_threshold_callback_client')); /* ダイナミックスクロールの値 */ // サーバーサイドのAjaxアクションの追加 add_action('wp_ajax_dynamic_scroll_threshold_server', array($this, 'dynamic_scroll_threshold_callback_server')); // wp_enqueue_scripts フックでスクリプトをエンキュー add_action('wp_enqueue_scripts', array($this, 'enqueue_my_scripts')); //add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts')); add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_styles')); // クライアントサイドのAjaxアクションの追加 ユーザーがログインしている場合に実行 add_action('wp_ajax_dynamic_scroll_threshold_client', array($this, 'dynamic_scroll_threshold_callback_client')); // Corrected: Use class method as callback add_action('admin_enqueue_scripts', array($this, 'enqueue_media_files')); // Corrected: Use class method as callback add_action('admin_footer', array($this, 'add_media_library_script')); // Corrected: Use class method as callback //add_action('admin_enqueue_scripts', array($this, 'my_enqueue_scripts')); add_action('wp_ajax_save_selected_banner_id', array($this, 'save_selected_banner_id_callback')); add_action('wp_ajax_nopriv_save_selected_banner_id', array($this, 'save_selected_banner_id_callback')); } // メディアライブラリのスクリプトを追加するメソッド //public function add_media_library_script() { //wp_enqueue_script('your-media-library-script-handle', plugin_dir_url(__FILE__) . 'js/back-script.js', array('jquery'), '1.0', true); //wp_localize_script('your-media-library-script-handle', 'yourScriptData', array( //'newBannerFieldID' => 'new-banner-id', // 新しいバナー画像のフィールドID //他に必要なデータがあれば追加 //)); //} // メディアライブラリのスクリプトを追加するメソッド //public function add_media_library_script() { //wp_enqueue_script('your-media-library-script-handle', plugin_dir_url(__FILE__) . 'js/back-script.js', array('jquery'), '1.0', true); //} // 他のメソッドやプロパティがあれば追加 // wp_enqueue_scripts フックでスクリプトをエンキュー //public function my_enqueue_scripts() { // ここにスクリプトのエンキュー処理を追加 //} // 他のメソッドやプロパティがあれば追加 // wp_enqueue_scripts フックでスクリプトをエンキュー public function enqueue_my_scripts() { // プラグインのディレクトリURLを取得 $plugin_dir_url = plugin_dir_url(__FILE__); // プラグインのバージョンを取得 $plugin_version = '1.0'; // プラグインのバージョンを設定 // JSファイルをエンキュー wp_enqueue_script( 'front-script', $plugin_dir_url . 'js/front-script.js', array('jquery'), // jQuery が必要な場合は指定 $plugin_version, true ); // ローカライズスクリプト wp_localize_script('front-script', 'myPluginData', array( 'ajaxUrl' => esc_url(admin_url('admin-ajax.php')), 'nonce' => wp_create_nonce('sticky-banner-nonce'), )); // ローカライズスクリプト //wp_localize_script('my-behind-script', 'myAdminData', array( //'ajaxUrl' => admin_url('admin-ajax.php'), // AjaxのURLを追加 //'nonce' => wp_create_nonce('sticky-banner-nonce'), // Nonceを追加 // ここに必要なデータを追加 //)); } //admin.js admin.css などのファイルは競合しやすい名前なのでファイルは作成しない。 // メディアライブラリのスクリプトを追加するメソッド public function add_media_library_script() { // メディアライブラリのスクリプトをエンキュー wp_enqueue_script('your-media-library-script-handle', plugin_dir_url(__FILE__) . 'js/back-script.js', array('jquery'), '1.0', true); // wpColorPickerの初期化 wp_enqueue_script('wp-color-picker'); wp_enqueue_style('wp-color-picker'); // メディアライブラリを開くためのスクリプトをローカライズ wp_localize_script('your-media-library-script-handle', 'myPluginData', array( 'nonce' => wp_create_nonce('my-plugin-nonce'), 'ajaxurl' => admin_url('admin-ajax.php') )); } // メディアライブラリのスクリプトをロード public function enqueue_media_files() { //if (!did_action('wp_enqueue_media')) { wp_enqueue_media(); //} } // admin_enqueue_scripts フックでスタイルをエンキュー public function enqueue_admin_styles() { // プラグインのディレクトリURLを取得 $plugin_dir_url = plugin_dir_url(__FILE__); // プラグインのバージョンを取得 $plugin_version = '1.0'; // プラグインのバージョンを設定 // CSSファイルをエンキュー wp_enqueue_style( 'my-admin-styles', $plugin_dir_url . 'css/back-style.css', array(), // 依存関係がない場合は空の配列 $plugin_version ); } /* Ajax処理 */ // バナー画像の保存 //public function save_selected_banner_id() { //$this->check_ajax_referer_and_die(); // POSTデータからバナーのIDを取得して保存 //if (isset($_POST['banner_id'])) { //$banner_id = sanitize_text_field($_POST['banner_id']); //update_option('selected_banner_id', $banner_id); //} // POSTデータから新しいバナーのIDを取得して保存 // if (isset($_POST['new_banner_id'])) { // $new_banner_image_id = sanitize_text_field($_POST['new_banner_id']); // update_option('new_banner_id', $new_banner_image_id); // } // Ajaxレスポンスを返す //echo json_encode(array('status' => 'success')); //wp_die(); // 必ず wp_die() を呼ぶ //} // バナー画像の保存 //public function save_selected_banner_id() { // セキュリティトークンを確認 //check_ajax_referer('sticky-banner-nonce', 'nonce'); // POSTデータからバナーのIDを取得して保存 //if (isset($_POST['banner_id'])) { //$banner_id = sanitize_text_field($_POST['banner_id']); //update_option('scroll_banner_id', $banner_id); // オプション名を 'scroll_banner_id' に変更 //wp_send_json_success(array('message' => 'Banner ID saved successfully.')); //} else { //wp_send_json_error(array('message' => 'Banner ID is missing.')); //} //} // Ajaxリクエストを処理する関数 function save_selected_banner_id_callback() { // Ajaxリクエストかどうかを確認 check_ajax_referer('my_ajax_nonce', 'nonce'); // バナーIDを受け取る if (isset($_POST['banner_id'])) { $banner_id = sanitize_text_field($_POST['banner_id']); update_option('scroll_banner_id', $banner_id); wp_send_json_success("Banner information saved successfully."); // 成功レスポンスを返す } else { wp_send_json_error("Error: Banner ID not provided."); // エラーレスポンスを返す } } // バナー画像URLの保存 public function save_selected_image() { $this->check_ajax_referer_and_die(); // POSTデータから画像URLを取得し、投稿IDに変換して保存 $image_url = sanitize_text_field($_POST['image_url']); $attachment_id = attachment_url_to_postid($image_url); update_option('scroll_banner_id', $attachment_id); // Ajaxレスポンスを返す echo json_encode(array('status' => 'success')); wp_die(); // 必ず wp_die() を呼ぶ } // バナー非表示オプションの保存 public function save_banner_hide_option() { $this->check_ajax_referer_and_die(); // POSTデータからバナー非表示オプションを取得して保存 $banner_hide = sanitize_text_field($_POST['banner_hide']); update_option('scroll_banner_hide', $banner_hide); // Ajaxレスポンスを返す echo json_encode(array('status' => 'success')); wp_die(); // 必ず wp_die() を呼ぶ } // バナーメッセージの色の保存 public function save_banner_message_color_option_callback() { $this->check_ajax_referer_and_die(); // POSTデータからバナーメッセージの色を取得 $message_color = sanitize_text_field($_POST['message_color']); $hex_color_pattern = '/^#[0-9a-fA-F]+$/'; // 色の形式が正しいか確認してから保存 if (preg_match($hex_color_pattern, $message_color)) { echo json_encode(array('status' => 'success', 'message' => 'Color option saved successfully.')); } else { echo json_encode(array('status' => 'error', 'message' => 'Invalid color code.')); } wp_die(); // 必ず wp_die() を呼ぶ } // 文字背景色のオプションの保存 public function save_banner_message_text_background_color_option_callback() { $this->check_ajax_referer_and_die(); // POSTデータから文字背景色を取得 $text_background_color = sanitize_text_field($_POST['text_background_color']); $hex_color_pattern = '/^#[0-9a-fA-F]+$/'; // 色の正規表現パターン // 色の形式が正しいか確認してから保存 if (preg_match($hex_color_pattern, $text_background_color)) { // 正しい色の場合 update_option('scroll_banner_message_background_color', $text_background_color); echo json_encode(array('status' => 'success', 'message' => 'Text background color option saved successfully.')); } else { // 無効な色コードの場合 echo json_encode(array('status' => 'error', 'message' => 'Invalid text background color code.')); } wp_die(); // 必ず wp_die() を呼ぶ } // ユーザーがバナーを非表示にするオプションの保存 public function save_user_hide_banner_option_callback() { $this->check_ajax_referer_and_die(); // チェックボックスの状態を取得 $banner_hide = isset($_POST['banner_hide']) ? sanitize_text_field($_POST['banner_hide']) : 'no'; // デバッグメッセージの追加 error_log('Banner Hide State: ' . $banner_hide); // 非表示オプションを保存 update_option('user_hide_banner_option', $banner_hide); // デバッグメッセージの追加 error_log('Option Saved: user_hide_banner_option = ' . $banner_hide); // 必ず wp_die を呼ぶ wp_die(); } // サーバーサイドのAjaxアクションの追加 public function dynamic_scroll_threshold_callback_server() { $this->check_ajax_referer_and_die(); if (isset($_GET['scroll_position'])) { // 新しいスクロール位置が送信された場合、保存 $new_scroll_position = sanitize_text_field($_GET['scroll_position']); update_option('scroll_banner_dynamic_scroll_start', $new_scroll_position); } else { // 動的なスクロール起点を取得 $dynamic_scroll_start = intval(get_option('scroll_banner_dynamic_scroll_start', 200)); $dynamic_scroll_start = min($dynamic_scroll_start, 1000); // クライアントサイドに動的なスクロール起点を返す echo json_encode($dynamic_scroll_start); } wp_die(); } // クライアントサイドの処理 スクロールの動き public function dynamic_scroll_threshold_callback_client() { // プラグインのディレクトリURLを取得 $plugin_dir_url = plugin_dir_url(__FILE__); // プラグインのバージョンを取得 $plugin_version = '1.0'; // プラグインのバージョンを設定 // JSファイルをエンキュー wp_enqueue_script( 'my-behind-script', $plugin_dir_url . 'js/behind-script.js', array('jquery'), // 必要に応じて追加の依存関係を指定 $plugin_version, true ); // ローカライズスクリプト //wp_localize_script('my-behind-script', 'myAdminData', array( //'ajaxUrl' => admin_url('admin-ajax.php'), // AjaxのURLを追加 //'nonce' => wp_create_nonce('sticky-banner-nonce'), // Nonceを追加 // ここに必要なデータを追加 //)); // HTML を返す代わりにデータを返す $response = array( 'html' => '<input type="number" id="scrollInputField" name="scroll_banner_dynamic_scroll_start" min="200" max="1000" />', 'description' => '<p class="description">現在のスクロール閾値: <span id="currentThreshold"></span></p>', ); // JSON形式でレスポンスを返す wp_send_json($response); } // Ajaxリクエストの安全性を確認して wp_die() を呼ぶ // アクションフックはいらない。 private function check_ajax_referer_and_die() { $nonce = $_REQUEST['nonce']; // Ajax refererを確認し、無効な場合は停止 check_ajax_referer('sticky-banner-nonce', 'nonce', true); // ここで wp_die() を明示的に呼び出す必要はありません。check_ajax_referer() が処理します } // クライアントサーバー バナーの表示とチェックボックスの表示 public function display_sticky_banner() { // バナー関連のオプション名の修正 $banner_id = get_option('scroll_banner_id'); $banner_hide = get_option('scroll_banner_hide', 'no'); $banner_message = get_option('scroll_banner_message', ''); $banner_link = get_option('scroll_banner_link', ''); $message_font_weight = get_option('scroll_banner_message_font_weight', 'normal'); $background_color = get_option('scroll_banner_message_background_color', '#ffffff'); // 新しいバナーの表示処理 //$new_banner_id = get_option('new_banner_id'); $new_banner_message = get_option('banner_message'); $new_banner_link = get_option('banner_link'); // バナーが有効で非表示設定がされていない場合のみ表示 if (($banner_id && $banner_hide !== 'yes') || is_admin()) { echo '<div id="scroll-banner">'; echo '<div>'; echo '<input type="checkbox" id="user-hide-banner-checkbox">'; echo '<label id="hide-banner-label" style="display: none;">Hide Banner</label>'; echo '</div>'; // バナーリンクが設定されていればリンクを表示 if (!empty($banner_link)) { echo '<a href="' . esc_url($banner_link) . '">'; } // バナー画像を表示 自動的に高さ 幅のHTMLを出力する lazyload が対応されている。 echo wp_get_attachment_image($banner_id, 'full'); // バナーリンクが設定されていればリンクを閉じる if (!empty($banner_link)) { echo '</a>'; } // バナーメッセージが設定されていれば表示 if (!empty($banner_message)) { // javascriptでフォントサイズと単位を取得を動的に取得 $font_size = esc_attr(get_option('scroll_banner_message_font_size', '16')); $font_unit = esc_attr(get_option('scroll_banner_message_font_unit', 'px')); echo '<p id="banner-message" class="banner-message" style="color: ' . esc_attr(get_option('scroll_banner_message_color', '#000')) . '; font-weight: ' . esc_attr($message_font_weight) . '; background-color: ' . esc_attr($background_color) . '; font-size: ' . $font_size . $font_unit . ';">' . esc_html($banner_message) . '</p>'; } echo '</div>'; // 新しいバナーの表示処理 /* if ($new_banner_id) { echo '<div id="new-scroll-banner">'; echo wp_get_attachment_image($new_banner_id, 'full'); if (!empty($new_banner_message)) { echo '<p class="banner-message">' . esc_html($new_banner_message) . '</p>'; } // メディアライブラリから新しいバナー画像を選択するためのボタン echo '<div class="media-uploader">'; echo '<input type="hidden" name="new_banner_id" id="new-banner-id" value="' . esc_attr($new_banner_id) . '" />'; echo '<button id="upload-new-banner" class="button">新しいバナー画像を選択</button>'; echo '<button id="remove-new-banner" class="button" style="display: ' . ($new_banner_id ? 'inline-block' : 'none') . '">選択した画像を削除</button>'; echo '</div>'; // 選択したバナー画像のプレビュー if ($new_banner_id) { echo '<div id="banner-image-preview">'; echo wp_get_attachment_image($new_banner_id, 'thumbnail'); echo '</div>'; } echo '</div>'; } */ } ?> <script> document.addEventListener('DOMContentLoaded', function() { var hideBannerCheckboxId = 'user-hide-banner-checkbox'; var checkbox = document.getElementById(hideBannerCheckboxId); if (checkbox) { checkbox.addEventListener('change', function () { var bannerHide = this.checked ? 'yes' : 'no'; var ajax = new XMLHttpRequest(); ajax.open('POST', '<?php echo admin_url('admin-ajax.php'); ?>'); ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); ajax.onload = function () { console.log('Ajax response:', ajax.response); var hideBannerLabel = document.getElementById('hide-banner-label'); if (hideBannerLabel) { if (bannerHide === 'yes') { hideBannerLabel.style.display = 'block'; console.log('Displaying message'); } else { hideBannerLabel.style.display = 'none'; console.log('Hiding message'); } } else { console.error('hide-banner-label element not found.'); } }; ajax.onerror = function () { console.error('Ajax request failed.'); }; ajax.send('action=save_user_hide_banner_option&nonce=<?php echo wp_create_nonce('sticky-banner-nonce'); ?>&banner_hide=' + bannerHide); }); } else { console.error('user-hide-banner-checkbox element not found.'); } }); </script> <?php } // クライアントサイドでのバナーの位置の表示とチェックボックスの表示 //public function control_sticky_banner() { //} //プラグインの管理画面ページ public function add_sticky_banner_to_content($content) { ob_start(); $this->display_sticky_banner(); $banner_html = ob_get_clean(); return $banner_html . $content; } public function add_sticky_banner_menu() { add_options_page('Sticky Banner Settings', 'Sticky Banner', 'manage_options', 'sticky-banner-settings', array($this, 'display_sticky_banner_settings')); } public function display_sticky_banner_settings() { ?> <div class="wrap"> <h2>Sticky Banner Settings</h2> <!-- バナーの表示エリア --> <!--<div id="preview-area"> <p id="preview-message"></p> <a id="preview-link" href="#"></a> <div id="your-new-html"> </div> </div>--> <!-- 設定フォーム --> <form method="post" action="options.php"> <?php settings_fields('sticky_banner_settings'); do_settings_sections('sticky-banner-settings'); // バナーを表示 $this->display_sticky_banner(); submit_button(); ?> </form> </div> <?php } /** * 設定ページの初期化と各種設定項目の登録を行う関数 */ public function sticky_banner_settings_init() { // 各設定項目の保存処理を WordPress に登録 register_setting('sticky_banner_settings', 'scroll_banner_id'); register_setting('sticky_banner_settings', 'scroll_banner_hide'); register_setting('sticky_banner_settings', 'scroll_banner_message'); register_setting('sticky_banner_settings', 'scroll_banner_link'); register_setting('sticky_banner_settings', 'scroll_banner_message_color'); register_setting('sticky_banner_settings', 'scroll_banner_message_font_size'); // フォントサイズの設定を追加 register_setting('sticky_banner_settings', 'scroll_banner_message_font_weight'); // フォントウェイトの設定を追加 register_setting('sticky_banner_settings', 'scroll_banner_message_background_color'); // フォントウェイトの設定を追加 register_setting('sticky_banner_settings', 'banner_image_id'); register_setting('sticky_banner_settings', 'banner_message'); register_setting('sticky_banner_settings', 'banner_link'); register_setting('sticky_banner_settings', 'scroll_banner_threshold');//スクルールの位置の保存 //register_setting('sticky_banner_settings', 'get_dynamic_scroll_threshold'); // // 他にも必要な設定項目があれば追加 // 設定ページにセクションを追加 add_settings_section('sticky_banner_section', 'Banner Settings', array($this, 'scroll_banner_section_callback'), 'sticky-banner-settings'); // 各項目の表示とコールバック関数を設定ページに追加 // バナーの選択 add_settings_field('scroll_banner_id', 'バナー選択', array($this, 'scroll_banner_id_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナー非表示オプション add_settings_field('scroll_banner_hide', 'バナー非表示オプション', array($this, 'scroll_banner_hide_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナーメッセージ add_settings_field('scroll_banner_message', 'バナーメッセージ', array($this, 'scroll_banner_message_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナーメッセージの色 add_settings_field('scroll_banner_message_color', 'バナーメッセージの色', array($this, 'scroll_banner_message_color_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナーメッセージのフォントサイズ add_settings_field('scroll_banner_message_font_size', 'バナーメッセージのフォントサイズ', array($this, 'scroll_banner_message_font_size_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナーメッセージのフォントウェイト add_settings_field('scroll_banner_message_font_weight', 'バナーメッセージのフォントウェイト', array($this, 'scroll_banner_message_font_weight_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナーリンク先URL add_settings_field('scroll_banner_link', 'バナーリンク先URL', array($this, 'scroll_banner_link_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // バナーメッセージの背景色 add_settings_field('scroll_banner_message_background_color', 'バナーメッセージの背景色', array($this, 'scroll_banner_message_background_color_callback'), 'sticky-banner-settings', 'sticky_banner_section'); // セクションの追加 add_settings_section('dynamic_scroll_start_section', '動的なスクロール起点', array($this, 'dynamic_scroll_start_section_callback'), 'sticky-banner-settings'); // フィールドの追加 add_settings_field('scroll_banner_dynamic_scroll_start', '動的なスクロール起点', array($this, 'scroll_banner_dynamic_scroll_start_callback'), 'sticky-banner-settings', 'dynamic_scroll_start_section'); } public function scroll_banner_section_callback() { // バナーの選択に関するセクションの表示 echo 'Select your banner from the media library.'; } // メディアライブラリー public function scroll_banner_id_callback() { // バナーIDの入力フィールドと選択ボタンの表示 $banner_id = get_option('scroll_banner_id'); echo '<input type="text" name="scroll_banner_id" value="' . esc_attr($banner_id) . '" />'; echo '<button class="button button-primary" id="select-banner-button">バナーを選択</button>'; } public function scroll_banner_hide_callback() { // バナー非表示オプションのチェックボックスの表示 $banner_hide = get_option('scroll_banner_hide', 'no'); echo '<input type="checkbox" name="scroll_banner_hide" id="hide-banner-checkbox" value="yes" ' . checked('yes', $banner_hide, false) . ' />'; } public function scroll_banner_message_callback() { // バナーメッセージのテキストエリアの表示 $banner_message = get_option('scroll_banner_message', ''); echo '<textarea name="scroll_banner_message">' . esc_textarea($banner_message) . '</textarea>'; } public function scroll_banner_message_color_callback() { // バナーメッセージの色を選択するカラーピッカーの表示 $banner_message_color = get_option('scroll_banner_message_color', '#000'); echo '<input type="text" name="scroll_banner_message_color" value="' . esc_attr($banner_message_color) . '" class="color-picker" data-default-color="#000" />'; } public function initialize_color_picker() { // カラーピッカーの初期化用のスクリプトの表示 ?> <script> jQuery(document).ready(function ($) { $('.color-picker').wpColorPicker(); }); </script> <?php } public function scroll_banner_link_callback() { // バナーリンク先のページを選択するドロップダウンメニューの表示 $banner_link = get_option('scroll_banner_link', ''); ?> <select name="scroll_banner_link"> <option value="">Select a page</option> <?php $pages = get_pages(); foreach ($pages as $page) { $selected = selected($banner_link, get_page_link($page->ID), false); echo '<option value="' . esc_url(get_page_link($page->ID)) . '" ' . $selected . '>' . esc_html($page->post_title) . '</option>'; } ?> </select> <?php } // セクションのコールバックメソッド public function dynamic_scroll_start_section_callback() { echo '<p>動的なスクロール起点の設定を行います。</p>'; } // フィールドのコールバックメソッド public function scroll_banner_dynamic_scroll_start_callback() { $value = esc_attr(get_option('scroll_banner_dynamic_scroll_start', 200)); echo '<input type="number" name="scroll_banner_dynamic_scroll_start" value="' . $value . '" step="1" />'; } /*AJEX 保存*/ // バナーメッセージのフォントサイズの設定フィールドと表示に関するコールバック public function scroll_banner_message_font_size_callback() { // 現在のフォントサイズと単位を取得 $current_font_size = get_option('scroll_banner_message_font_size', '16'); $current_unit = get_option('scroll_banner_message_font_unit', 'px'); $min_font_size = 0; // フォントサイズの下限 $max_font_size = 40; // フォントサイズの上限 // フォントサイズの調整UIの生成 echo '<input type="number" name="scroll_banner_message_font_size" value="' . esc_attr($current_font_size) . '" min="' . $min_font_size . '" max="' . $max_font_size . '" step="1" />'; // 単位の選択UIの生成 $units = array('px', 'em', 'rem'); // 使用可能な単位のリスト echo '<select name="scroll_banner_message_font_unit">'; foreach ($units as $unit) { $selected = selected($current_unit, $unit, false); echo '<option value="' . esc_attr($unit) . '" ' . $selected . '>' . esc_html($unit) . '</option>'; } echo '</select>'; // フォントサイズの入力形式に関する説明文の表示 echo '<p class="description">バナーメッセージのフォントサイズを直接入力してください(範囲: ' . $min_font_size . ' から ' . $max_font_size . ')。</p>'; } // フォントウェイトの設定フィールド(バナーメッセージのフォントウェイト)の表示に関するコールバック public function scroll_banner_message_font_weight_callback() { // 現在のフォントウェイトを取得 //get_option関数を使用して現在のフォントウェイトの値を取得し、それに基づいて選択肢が選択されているかどうかを確認 $current_font_weight = get_option('scroll_banner_message_font_weight', 'normal'); // 入力フィールドの生成 echo '<select name="scroll_banner_message_font_weight">'; echo '<option value="normal" ' . selected('normal', $current_font_weight, false) . '>Normal</option>'; echo '<option value="bold" ' . selected('bold', $current_font_weight, false) . '>Bold</option>'; // 他のフォントウェイトのオプションを追加することもできます echo '</select>'; // フォントウェイトの選択に関する説明文の表示 echo '<p class="description">バナーメッセージのフォントウェイトを選択してください。</p>'; } public function scroll_banner_message_background_color_callback() { // バナーメッセージの背景色を選択するカラーピッカーの表示 $background_color = get_option('scroll_banner_message_background_color', '#ffffff'); // デフォルトは白色 echo '<input type="text" name="scroll_banner_message_background_color" value="' . esc_attr($background_color) . '" class="color-picker" data-default-color="#ffffff" />'; } /* public function new_banner_image_callback() { // 新しいバナー画像のIDを取得 $new_banner_image_id = get_option('new_banner_id'); // ファイルメディアアップローダーフィールドの表示 echo '<div class="media-uploader">'; echo '<input type="hidden" name="new_banner_id" id="new-banner-id" value="' . esc_attr($new_banner_image_id) . '" />'; echo '<button id="upload-new-banner" class="button">新しいバナー画像を選択</button>'; // 選択した画像があれば「選択した画像を削除」ボタンを表示 if ($new_banner_image_id) { echo '<button id="remove-new-banner" class="button">選択した画像を削除</button>'; } echo '</div>'; // 選択したバナー画像のプレビュー if ($new_banner_image_id) { echo '<div id="new-banner-preview">'; echo wp_get_attachment_image($new_banner_image_id, 'thumbnail'); echo '</div>'; } // 新しいバナー画像に関する説明文 echo '<p class="description">新しいバナー画像を選択してください。</p>'; } */ // Ajax経由でオプションを保存するためのメソッド // バナーを非表示チェックさせる public function save_option_via_ajax() { // Ajaxリクエストの安全性を確認 check_ajax_referer('sticky-banner-nonce', 'nonce'); // バナー非表示オプションが送信された場合、保存 if (isset($_POST['banner_hide'])) { // バナー非表示オプションを取得して保存 $banner_hide = sanitize_text_field($_POST['banner_hide']); update_option('scroll_banner_hide', $banner_hide); } // 画像URLが送信された場合、選択された画像を保存 if (isset($_POST['image_url'])) { // 画像URLから添付ファイルのIDを取得 $image_url = sanitize_text_field($_POST['image_url']); $attachment_id = attachment_url_to_postid($image_url); // 添付ファイルIDをオプションとして保存 update_option('scroll_banner_id', $attachment_id); } // フォントサイズも保存する if (isset($_POST['scroll_banner_message_font_size'])) { $message_font_size = sanitize_text_field($_POST['scroll_banner_message_font_size']); update_option('scroll_banner_message_font_size', $message_font_size); } // フォントウェイトも保存する if (isset($_POST['scroll_banner_message_font_weight'])) { $message_font_weight = sanitize_text_field($_POST['scroll_banner_message_font_weight']); update_option('scroll_banner_message_font_weight', $message_font_weight); } // 背景色も保存する if (isset($_POST['scroll_banner_message_background_color'])) { $message_background_color = sanitize_text_field($_POST['scroll_banner_message_background_color']); update_option('scroll_banner_message_background_color', $message_background_color); } // バナーID if (isset($_POST['banner_id'])) { $banner_id = sanitize_text_field($_POST['banner_id']); update_option('scroll_banner_id', $banner_id); } // 選択したバナー画像のプレビューID //if (isset($_POST['new_banner_id'])) { //$new_banner_image_id = sanitize_text_field($_POST['new_banner_id']); //update_option('new_banner_id', $new_banner_image_id); //} // 新しいバナースクロール位置が送信された場合、保存 if (isset($_GET['scroll_position'])) { $new_scroll_position = sanitize_text_field($_GET['scroll_position']); update_option('scroll_banner_dynamic_scroll_start', $new_scroll_position); } // Ajax レスポンスを返す echo json_encode(array('status' => 'success')); wp_die(); } } // オブジェクトを生成 $scrollBannerPlugin = new ScrollBannerPlugin(); ?>
jQuery(document).ready(function ($) { // バナー選択ボタンのクリックイベント $("#select-banner-button").on("click", function (e) { e.preventDefault(); openMediaLibrary(); }); // メディアライブラリーを開く関数 function openMediaLibrary() { var frame = wp.media({ title: "Select Banner", multiple: false, library: { type: "image" }, button: { text: "Select" }, }); // メディアが選択された時の処理 frame.on("select", function () { var attachment = frame.state().get("selection").first().toJSON(); var bannerId = attachment.id; // バナーのIDを取得 // バナーIDを保存する関数を呼び出し saveBannerInfo(bannerId); }); // メディアライブラリーを開く frame.open(); } // バナーIDをサーバーに送信する関数 function saveBannerInfo(bannerId) { // Ajaxリクエストを送信 jQuery.ajax({ type: 'POST', url: myPluginData.ajaxurl, data: { action: 'save_selected_banner_id', // PHP側で実行するアクション banner_id: bannerId, // バナーのID nonce: myPluginData.nonce // nonce }, success: function(response) { console.log("Banner information saved successfully."); // 成功した場合の処理を追加できます }, error: function(xhr, status, error) { console.error("Error saving banner information:", error); // エラーが発生した場合の処理を追加できます } }); } });
I can not change use medeia library. help me please
thank you
Viewing 5 replies - 1 through 5 (of 5 total)
Viewing 5 replies - 1 through 5 (of 5 total)
- The topic ‘admin-ajax.php 403 (Forbidden)’ is closed to new replies.