質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

629閲覧

管理画面から追加したメタデータをビジュアルエディタのショートコード埋め込みボタンに反映したい

keisuke1223

総合スコア1

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2020/06/01 10:20

編集2020/06/02 03:50

前提・実現したいこと

ビジュアルエディタでショートコードを埋め込める機能を実装しています。

ユーザー機能をカスタマイズし、管理画面からメタデータの項目を追加できるようにしました。
ここで追加されたユーザーのメタデータを、ショートコードに反映したいと考えています。

例えば、「開発環境」という項目や、「会社名」という項目が追加された場合、
ショートコードの埋め込みボタンには、custom0,custom1が埋め込めるようにしたい。

発生している問題・エラーメッセージ

もともとWordPressにある項目については、決め打ちで指定するだけでよかったのですが、
自由項目を追加した場合の対応で詰まってしまいました。

該当のソースコード

 
tinymce.js 

javascript

1 2tinymce.PluginManager.add('my_mce_button', function( editor, url ) { 3 editor.addButton( 'my_mce_button', { 4 text: 'ショートコード埋め込み', 5 icon: false, 6 type: 'menubutton', 7 menu: [ 8 { 9 text: 'ユーザー名', 10 onclick: function() { 11 var selected_text = editor.selection.getContent(); 12 var return_text = ''; 13 return_text = '[nickname]'; 14 editor.insertContent(return_text); 15 } 16 }, 17 { 18 text: '姓', 19 onclick: function() { 20 var selected_text = editor.selection.getContent(); 21 var return_text = ''; 22 return_text = '[last_name]'; 23 editor.insertContent(return_text); 24 } 25 }, 26 ] 27 }); 28}); 29 30

functions.php

php

1function custom_mce_external_plugins( $plugin_array ) { 2 $plugin_array['custom_button_script'] = get_template_directory_uri() . "/ex/assets/tinymce.js"; 3 return $plugin_array; 4} 5add_filter( 'mce_external_plugins', 'custom_mce_external_plugins' ); 6 7function my_add_mce_button() { 8 if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) { 9 return; 10 } 11 if ( 'true' == get_user_option( 'rich_editing' ) ) { 12 add_filter( 'mce_external_plugins', 'my_add_tinymce_plugin' ); 13 add_filter( 'mce_buttons', 'my_register_mce_button' ); 14 } 15} 16add_action('admin_head', 'my_add_mce_button'); 17 18function my_add_tinymce_plugin( $plugin_array ) { 19 $plugin_array['my_mce_button'] = get_template_directory_uri() .'/ex/assets/tinymce.js'; 20 return $plugin_array; 21} 22 23function my_register_mce_button( $buttons ) { 24 array_push( $buttons, 'my_mce_button' ); 25 return $buttons; 26}

 

 

試したこと

PHPからショートコードのリストをjson形式で渡してみて、forinやwhileを試してみてもうまくいきませんでした。

php

1 2$short_code_list = json_encode($short_code_list); 3?> 4<script> 5let text_list = <?php echo $short_code_list; ?>; 6</script> 7

javascript

1// phpから受け取ったデータ 2custom0: "開発環境" 3custom1: "携帯電話" 4custom2: "会社" 5last_name: "姓" 6nickname: "ユーザーネーム"

javascript

1 2 var key = Object.keys(text_list); 3 var value = Object.values(text_list); 4 var cnt = key.length; 5 var menu = [] 6 7 for(let i=0; i < cnt; i++) { 8 add_menu = [ 9 { 10 text: value[i], 11 onclick: function() { 12 var selected_text = editor.selection.getContent(); 13 var return_text = ''; 14 return_text = key[i]; 15 editor.insertContent(return_text); 16 } 17 } 18 ]; 19 menu = menu.concat(add_menu); 20 } 21 22

ループをつかって、menu部分を埋め込んでみたのですが、onclick: function() {の部分でリファレンスエラーになってしまいます。
jsの理解ができておらずで、ご教授いただければ幸いです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

単純に、tinymce.PluginManager.add配下にループを記述すれば大丈夫でした。

javascript

1 2jQuery(document).ready(function ($) { 3 4 var key = Object.keys(text_list); 5 var value = Object.values(text_list); 6 var cnt = key.length; 7 var menu = [] 8 tinymce.PluginManager.add('my_mce_button', function( editor, url ) { 9 for(let i=0; i < cnt; i++) { 10 add_menu = [ 11 { 12 text: value[i], 13 onclick: function() { 14 var selected_text = editor.selection.getContent(); 15 var return_text = ''; 16 return_text = '[' + key[i] + ']'; 17 editor.insertContent(return_text); 18 } 19 } 20 ]; 21 menu = menu.concat(add_menu); 22 } 23 24 editor.addButton( 'my_mce_button', { 25 text: 'ショートコード埋め込み', 26 icon: false, 27 type: 'menubutton', 28 menu:menu 29 }); 30 }); 31}); 32

投稿2020/06/02 03:56

keisuke1223

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問