• いつもお世話になります。

    さて、今回下記のような仕組みを作りたいと考えているのですが
    今一つ実現方法がピンと来ていません。
    実現方法のアドバイスを頂けると有り難いのですが。

    1)投稿、もしくは固定ぺージ上に入力可能項目を設置して閲覧者が項目を
      入力もしくは選択

    2)投稿、もしくは固定ぺージ上引数付のショートコードを記載

    3)1)で取得した値を2)のショートコードに渡して処理を実行

    といった流れです。

    ちょっと初歩的な質問で申し訳ありませんがどなたか回答を頂けますと有り難いです。

    以上

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • hide

    (@hideokamoto)

    ショートコード APIを利用することになります。

    [bartag foo="something" bar="something else"]

    のような形で引数をショートコードに設定し、
    プラグインやfunctions.phpに以下のコードを入れることでデータを取得できます。

    function bartag_func($atts) {
    	extract(shortcode_atts(array(
    		'foo' => 'no foo',
    		'bar' => 'default bar',
    	), $atts));
    
    	return "foo = {$foo}";
    }
    add_shortcode('bartag', 'bartag_func');

    ショートコード APIにサンプルが色々と載っていますので、ぜひお試し下さい。

    トピック投稿者 pin1256

    (@pin1256)

    hideokamotoさん、ご回答ありがとうございます。

    あまり慣れていないので旨く読解出来ていないのですが
    ご提示頂きましたソースで”something”に閲覧者からのブラウザ上の入力から値を設定する方法が良く理解できていません。

    この部分はどのように記載すれば可能でしょうか。
     ※質問の部分の1)、3)に該当

    以上

    単純な答えとしては、「できない」ということになると思います。もちろん、PHP でできることなら、何でもやらせることはできますから、do_shortcode() が実行される前に、本文をパースして無理やり引数を書き換えることだってできなくはありませんが、そうなると、そもそもショートコードを使う意味がありません。また、ショートコードそのものも、プログラムの実行中に書き換えることは想定していないんじゃないですかね。

    どんなデータを受け取って、どんな処理をしたいのかが具体的にわかると、フローしやすくなるかもしれません。

    hide

    (@hideokamoto)

    「閲覧者」という存在がWordPressの管理画面から入力を行うのか、
    サイト上から入力を行うのかで難易度もかなり変わってきそうですね。

    コメントのような感覚でサイト上から入力してもらう想定であれば、
    相当な知識もしくは経験がないと実装は困難だと思います。

    トピック投稿者 pin1256

    (@pin1256)

    hideokamotoさん、kjmtsh さんコメントありがとうございます。

    閲覧者の定義は管理者ではなく一般のインターネットユーザーを想定しております。

    今回ショートコードを検討した理由は以前に作ったショートコードを生かしたいというつまらない理由もあるのですが、
    もう一つの理由としてはExec-PHPプラグインみたいに直接PHPが動作可能な環境よりもセキュリティ面で少し安心ではと考えて検討しています。

    ※そもそもWordpressの環境が良く理解できていないので書いていること自体が的外れかもしれませんが。

    実現したかったのはWordpress上のサイトからインターネットのユーザーが閲覧時に検索条件を指定して他サイトのAPIプログラムにその条件を投げて検索結果を最初のサイトに表示するというものです。

    現時点ではショートコードを投稿ページに記載して結果を表示するところまでは出来ていたのですがユーザーが指定した条件をショートコードに渡すすべが思いつかず質問をさせていただいております。

    お二人の回答からショートコードでは実現が難しい事は理解できましたので
    ショートコードにこだわらずWordpressで実現できる方法がございましたらご教授いただけると有り難いです。

    以上

    WordPress サイトから… 他サイトの API に…

    ということなので、WordPress に付属の機能で実現するとすると、wp_ajax_nopriv_(action) を使うことができます。JavaScript と jQuery を理解していることが十分条件です。JSON API をたたいて、データを得るみたいな用途には jQuery がお手軽だと思いますが、WordPress の場合、基本的に Plugin API なので、Codex の文書はプラグイン作者向けになっているのが弱点です。JavaScript は自分で勉強してね、という考え方でしょう。

    全ての処理を PHP で行うこともできます。この場合、相手方サーバからの応答が返るまで、閲覧者はブラウザの操作ができなくなります。ネットワークの障害も考慮すると簡単とは言えませんが、admin-ajax.php を使うよりは単純です。他サイトの API に接続することはすでにできているようですから、pin1256 さんの場合は、ショートコードで引数を処理しているところを、POST または GET で飛んできたクエリを処理するように変更すればよいと思います。ショートコードではなくて、普通の関数として動作させるということですね。

    最後に、プラグインを使うという手段が考えられます。非ログインユーザからの入力を受け付ける画面を「フォーム」と呼びますが、その作成を支援するプラグインが有償、無償とわず複数あるようです (使ってないので、よくわかりませんが)。必要に合ったものを見つけるのは難しいかもしれませんが、Plugin Directory にあるものなら、ダウンロードして、どんなことをしているか研究するということもできます。

    なお、Exec-PHP は、関係ありません。

    トピック投稿者 pin1256

    (@pin1256)

    kjmtsh さんコメントありがとうございます。

    JavaScript と jQuery は未だ未勉強ですので
    今後の課題として2番目の方法を検討したいと思います。
    そんなにシリアスな処理を行うわけではありませんので
    回線障害の件は頻度を考えれば許容範囲ではないかと思います。

    実はこの方法に近い内容を最初にイメージとして考えたのですが
    ”普通の関数として動作させるということですね。”の部分の
    イメージがわかずにいました。

    この部分は具体的にはどこに書くのでしょうか?

    初歩的な質問を繰り返してこころ苦しいのですが
    可能でしたらご教授いただけませんでしょうか。

    以上

    おお、関数の定義を書く場所ですか。たぶんグローバルな関数になると思いますので、WordPress がページを表示するときに読み込むファイルなら、どこに書いても動作すると思いますが、普通は、お使いのテーマのディレクトリの中に、functions.php というファイルがありますから、そこに書けばよいと思います。

    編集するときには、該当のファイルをローカルにダウンロードして、ちゃんとしたエディタを使って編集し、できればローカルで動作チェックをしてから、もとの場所にアップロードする、というのが良い子のやり方です。外観->テーマの編集 でやると、失敗したときにログインさえできない状態になることがあるからです。

    トピック投稿者 pin1256

    (@pin1256)

    kjmtshさん、度々のコメントありがとうございます。
    また、返信が遅くなり申し訳ありません。

    functions.php はショートコードを記載したファイルなので
    少し判ります。

    まだ少しイメージがわいていない部分があるのですが
    大分ヒントを頂いたので頑張って調べてみます。
    ※挫けてまた質問してしまうかもしれませんが。

    また、ご心配いただいているテスト環境は、ローカル環境には”xampp”というのを入れてあるのでそれで行けるかと思います。
    まあサーバー上も一つテスト用のドメインを用意しているので
    いきなり本番環境でテストをするようなことはないです。
    ※サーバー上のそのあたりのファイルは一度FTPでPCにダウンロードしてから
     編集後アップするようにしています。

    少し時間が掛かるかもしれませんがトライしてみます。

    以上

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「ショートコードへの引数の渡し方について」には新たに返信することはできません。