前提・実現したいこと
ビジュアルエディタでショートコードを埋め込める機能を実装しています。
ユーザー機能をカスタマイズし、管理画面からメタデータの項目を追加できるようにしました。
ここで追加されたユーザーのメタデータを、ショートコードに反映したいと考えています。
例えば、「開発環境」という項目や、「会社名」という項目が追加された場合、
ショートコードの埋め込みボタンには、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の理解ができておらずで、ご教授いただければ幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。