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

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

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

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2091閲覧

ボタンクリックで指定アドレスを開くWordPressショートコードを作成したい

eco

総合スコア3

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/09/03 02:54

前提・実現したいこと

WordPress環境下でショートコードを用い
HTMLで配置したボタンをクリックしたら
エディットボックスに書かれているアドレスをブラウザの別タブで開きたいです。

----HTMLでの表示イメージここから

イメージ説明
----HTMLでの表示イメージここまで

後述した、ソースコードを実装しましたが期待通りの動作になりませんでした。
(同じタブで、現在表示しているページがリロードされるだけでした)
不備や問題点があればご教示ください。

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

特にエラーコードは出力されませんが
該当ソースコードの実装をして、ボタンをクリックしても指定アドレスを開くことができませんでした

該当のソースコード

■HTML

<form name="searchRoot"> <label><input type="text" name="adrs" value=""></label> <button onClick="window.open([test arg01=searchRoot.adrs.value];, '_blank')">開くボタン</button><br> </form> ※HTMLでエディットボックス、ボタンを配置し、ショートコードの呼び出しを実現したい部分

■PHP(WordPressの子テーマのfunctions.phpに記述)
function test($atts) {
echo $atts[0];
}
※ショートコード呼び出しで設定された引数を出力する
add_shortcode('test', 'test');

試したこと

前述のソースを実装し、ボタンをクリックする

補足情報(FW/ツールのバージョンなど)

WordPress:5.8
PHP:7.4.2

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

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

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

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

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

guest

回答2

0

ベストアンサー

ご返答ありがとうございます。

まず、デベロッパーツールで確認した際のコードについてですが、[test arg01=searchRoot.adrs.value]がそのまま残っていますので、ショートコードが変換されていない状態です。
これはセキュリティー等のため特定のhtmlタグや、属性内ではショートコードを変換しないようになっているためです。
解決策は後述します。

htmlの記載場所については「カスタムHTML」ブロックということで正しくjsも動いているようです。
onclickが動かないというのはクラシックエディターで考えておりましたため、忘れてください。
またphpファイル内でもないので<?php do_shortcode('[xxxxx]'); ?>の話も忘れてください。

<code>機能については言葉足らずですみません、teratailへの投稿の際の話です。
<code>機能を使うことでコードの色付けとインデントが反映されるので見やすくなります。

下記の部分を反映いただけば直るのではないかと思います。
1.ショートコードの作成はreturnを使う
2.ショートコードの変換を許可する処理を追加
3.htmlのセミコロンを取る

php

1//functions.php内 2 3function test($atts) { 4 // echo $atts['arg01']; 5 return $atts['arg01'];//1.echoではなくreturnにする 6} 7add_shortcode('test', 'test'); 8 9//2.追加 <button>のonclick属性内でのショートコード変換を許可する 10function my_wp_kses_allowed_html( $tags, $context ) { 11 $tags['button']['onclick'] = true; 12 return $tags; 13} 14add_filter( 'wp_kses_allowed_html', 'my_wp_kses_allowed_html', 10, 2 );

html

1//3.ショートコード直後の;(セミコロン)を削除 2<form name="searchRoot"> 3<label><input type="text" name="adrs" value=""></label> 4<button onClick="window.open([test arg01=searchRoot.adrs.value], '_blank')">開くボタン</button><br> 5</form>

投稿2021/09/03 13:59

webgoto

総合スコア1293

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

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

eco

2021/09/04 06:11

webgotoさん ご回答ありがとうございます。 コメントいただいた内容で、目的を達成することができました。 wp_kses_allowed_html関数、code機能など知らなかった情報が多くあり 色々と参考になり大変助かりました。 以上です、よろしくお願いいたします。
guest

0

問題解決のためにブラウザのデベロッパーツールを使用して、ボタン要素のソース部分が想定の形式になっているか確認されることをおすすめします。
デベロッパーツールの表示方法はブラウザにより多少異なりますが、要素上で右クリックしてメニューの「検証(調査?)」押すと表示されると思います。

現時点でわかる事としては、test関数の引数の使い方がおかしいと思います。

php

1function test($atts) { 2// echo $atts[0];誤り 3echo $atts['arg01']; 4} 5

また、このHTMLコードはどこで使用されているのでしょうか。
wordpressの投稿エディター内ではボタンのonclickは使えない気がしますし、
phpファイル内ならショートコードの使用に<?php do_shortcode('[xxxxx]'); ?>が必要かと思います。

あとコードを記載される時は、<code>機能を使うようにされたほうが良いと思います。

投稿2021/09/03 05:08

webgoto

総合スコア1293

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

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

eco

2021/09/03 12:43

webgotoさん ご回答ありがとうございます。 すみません、説明が不十分でしたので コメントいただいた内容に対して回答させていただきます >現時点でわかる事としては、test関数の引数の使い方がおかしいと思います。 指摘いただいた内容を修正のうえ、以下の内容を確認いたしました >問題解決のためにブラウザのデベロッパーツールを使用して、 >ボタン要素のソース部分が想定の形式になっているか確認されることをおすすめします。 >デベロッパーツールの表示方法はブラウザにより多少異なりますが、 >要素上で右クリックしてメニューの「検証(調査?)」押すと表示されると思います。 ブラウザはedgeを使用しています 開発者ツールでエディットボックスとボタンを展開してみたところ以下のようになっていたので --- <form name="searchRoot"> <label><input type="text" name="adrs" value="http://www.yahoo.co.jp"></label> <button onclick="window.open([test arg01=searchRoot.adrs.value];, '_blank')">開くボタン</button><br> </form> --- 期待通りにはなっていました。 ただ、以下の処理の <label><input type="text" name="adrs" value=""></label> <button onclick="window.open([test arg01=searchRoot.adrs.value];, '_blank')">開くボタン</button> ボタンを押したときに実行されることを想定している window.open([test arg01=searchRoot.adrs.value];, '_blank') の以下だけを抜き出して実行したところ [test arg01=searchRoot.adrs.value]; 結果は editボックスにhttp://www.yahoo.co.jpとした状態でも searchRoot.adrs.valueが出力されていたため ショートコードへの引数受け渡しがうまくいっていないように見えました このポイントでなにか情報があればご教示ください >また、このHTMLコードはどこで使用されているのでしょうか。 HTMLのコードはWordpressの投稿エディタの「カスタムHTML」に記述しています >wordpressの投稿エディター内ではボタンのonclickは使えない気がしますし、 目的とする機能は、以下の機能を組み合わせたものであるため (1)ボタンを押したら、ブラウザの別タブで指定のアドレスを開く (2)ショートコードを実行する 個別の動作確認を行っています (1)は以下のコードは想定通り動作したのでonclickは「カスタムHTML」ないでは使えると考えています。 ---- <form> <button type="“button”" onclick="window.open('http://www.yahoo.co.jp', '_blank'); return false;">検索</button> </form> ---- (2)については、以下の指摘に関連しますが >phpファイル内ならショートコードの使用に<?php do_shortcode('[xxxxx]'); ?>が必要かと思いま ■functions.phpに以下の関数を追加し <?php function test() { return "http://www.yahoo.co.jp"; } add_shortcode('test', 'test'); ?> ■「カスタムHTML」にショートコード呼び出しを記述 [test] これで投稿をブラウザで開いた際に http://www.yahoo.co.jpが表示されることまでを確認しております。 >あとコードを記載される時は、<code>機能を使うようにされたほうが良いと思います。 これはHTMLの<code>タグのことでしょうか 今回は、できればですがショートコードで機能を実現したいので ショートコードの対応を考えさせてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問