下記ページにコード例と説明が載っていますが、これだと役に立ちませんか?
http://wpdocs.osdn.jp/ショートコード_API
追記: add_shortcode() の第2パラメータで呼び出す関数が文字列を返すと、それが Web ブラウザーに表示されます。何も返さなければ、何も表示されません。
-
この返信は6年、 5ヶ月前にgblsmが編集しました。
@gblsm さん
コメントありがとうございます。
またショートコードAPIのご紹介ありがとうございます。
ただドキュメントで紹介されている独自関数の例は、関数の返り値が”return”を使った文字列となっています。
function paypalbutton_func(){
paypal_scripts();
}
add_shortcode( 'paypalbutton', 'paypalbutton_func' );
一方で自分が質問しているpaypalbutton_func()関数は、
関数の実行結果としてpaypal_scripts()の実行結果を用いています。
やはりショートコードAPI(add_shortcode)で使われる関数は、
関数の返り値が”return”を使った文字列以外は受け付けられないのでしょうか?
たびたびのお手数をおかけして恐れ入ります。
もしご存知でしたらご教示をお願い申し上げます。
こんにちは
何が問題なのか理解できないのですが・・・
paypal_scripts();
はJavaScriptをenqueueしているだけですよね?
enqueueされればそれで良いので、別になにもreturnしたり表示する必要はないと思いますが・・・
それとも、質問の趣旨はショートコード中でenqueueしたもののscriptタグが生成されない、ということでしょうか?
しかし、wp_enqueue_scripts
アクションフックで
paypal_scripts()
が呼び出されているので、すでにenqueueされているように見えます。
ショートコードで再度enqueueする意味が何かあるのでしょうか?
やりたいことを一言でまとめてしまうと
下記ページに掲載されているコード(ボタン表示とクリック時の動作)をWordPress のショートコードを使って配置したい
Express Checkout – Add the PayPal Button
https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/add-paypal-button/
ですか?
@munyagu さん。
いつもアドバイスありがとうございます。
それとも、質問の趣旨はショートコード中でenqueueしたもののscriptタグが生成されない、ということでしょうか?
はい。私の個人的な感想として、munyaguさんがおっしゃるような感じがするという主旨です。
ショートコードで再度enqueueする意味が何かあるのでしょうか?
PayPal ExpressCheckoutのボタンを表示させるためには、
<div id="paypal-button-container"></div>
の直後に、
<script>
paypal.Button.render({
...
});
</script>
のスクリプトタグを配置する必要があるからです。
こちらのコードはfunctions.phpもプラグインも使わず、
直接、content.phpにdivタグとscriptタグを貼り付けたものです。
PayPal ExpressCheckoutの仕様上、このようなコードの配置をしなければPayPalボタンが表示されないため、ショートコードで再度’/js/expresscheckout.js’を表示させるような書き方をしています。
@gblsm さん。
たびたびのコメントありがとうございます。
やりたいことを一言でまとめてしまうと
はい。おっしゃる通りです。gblsmさんが示していただいた、
Add the script to your clientのうち以下の3つの要件が揃えば、PayPalのボタンが表示されることになります
1. headタグ内にscriptタグの表示
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
2. bodyタグ内にdivタグの表示
<div id="paypal-button"></div>
3.bodyタグ内にdivタグ内にscriptタグの表示
<script>
paypal.Button.render({
...
});
</script>
なお、こちらのコードは上記の3つの要件を揃えたコードです。関数もプラグインも使わず、すべてのコードを直接コピペしています。
まだよくわからないのですが、
[paypalbutton]というショートコードの関数で、divタグのあとに出力しないといけないとされているscriptタグのテキストをreturnすれば良いと思うのですが、そういうことではないんですよね?
もっと言えば、ショートコードを2つに分ける意図もよくわかりません。
続けて出力されればいいなら、1つのショートコードでいいと思いますが・・・
また、「PayPal ExpressCheckoutの仕様上」とかかれている、
<div id="paypal-button"></div>
の直後にscriptタグが配置されないといけないというのは、本当にそうでしょうか?
divタグがdocumentに定義されたあとにそのscriptが実行されればよいのではないかと思います。
外部スクリプトファイルの状態でもdocument.ready
などでdocument読み込み後に実行すれば良いと思います。
もちろん、直後に記述したほうが、ボタンは素早く現れると思いますが。
@munyagu さんのコメントが的を得ていると思いましたので、これ以上のコメントは差し控えます。
@munyagu さん。
たびたびのコメントありがとうございます。
再度いただいたコメントについて、下記の4点を申し上げます。
—
1.
divタグのあとに出力しないといけないとされているscriptタグのテキストをreturnすれば良いと思うのですが、そういうことではないんですよね?
本来であればdivタグのあとにそのままscriptタグのテキスト出力したいと考えています。
以下のような感じにして[paypal]という1つのショートコードを記事投稿画面に貼って、
記事でPayPalボタンが表示されることが、もっとも自分がやりたいことです。
// [paypal]
function paypal_func(){
$paypaldiv = '<div id="paypal-button-container"></div>';
return $paypaldiv;
paypal_scripts();
}
add_shortcode( 'paypal', 'paypal_func' );
2.
もっと言えば、ショートコードを2つに分ける意図もよくわかりません。
わざわざショートコードを2つに分ける意図は、paypal_scripts()関数が、
自分の意図通りに反映されないため、あえて[paypaldiv]と[paypalbutton]に分けています。
とりあえず2つに分けることによって、なぜ[paypalbutton]が意図通りに反映されないか確認するつもりでした。
3.
直後にscriptタグが配置されないといけないというのは、本当にそうでしょうか?
恐れ入ります。この件につきましては私の認識違いでした。divタグとscriptタグの順番を入れ替え、無関係なタグを記述しGitHubにブランチを作って確認したところ、PayPalボタンは表示されました。
<script>
paypal.Button.render({
...
});
</script>
<p>hoge</p>
<div id="paypal-button-container"></div>
4.
3について考察すると、そもそも
// [paypalbutton]
function paypalbutton_func(){
paypal_scripts();
}
add_shortcode( 'paypalbutton', 'paypalbutton_func' );
というコードは先だってご指摘いただいたように不要ということになります。
ただし、
function paypal_scripts() {
wp_enqueue_script( 'paypal_scripts', plugins_url('/js/expresscheckout.js'));
}
add_action( 'wp_enqueue_scripts', 'paypal_scripts' );
というコードは読み込まれず、記事投稿画面に[paypaldiv]のショートコードを貼っても
なぜPayPalのボタンが表示されないのか?という疑問が残ってしまいます。
—
たびたびの質問で恐れ入りますが、お手すきの時にでもご確認をいただければ幸いです。
@gblsm さん。
コメントありがとうございます。
これ以上のコメントは差し控えます。
これからもどうぞよろしくお願いします。