2017-01-27 9 views
0

私はWordpressの中間開発者で、javascript/jquery初心者です。私は最近、複数の従業員がその日のコースに追加することができる群集調のWebフォームを作成できるかどうかを確認するよう依頼されました(生産メモ)。毎日午後5時にフォームを自動提出すると、すべてのスタッフ。従業員が追加したメモがない場合、フォームは自動提出しないでください。毎日自動提出する機能を実行するために、空のフィールドと自動提出フォーム Wordpress Cronジョブは、webformを送信するjavascript関数を呼び出します。

  • Wordpressのcronジョブをチェックするために

    1. クラウドソース形式
    2. 機能:それはコンポーネントだにプロジェクトを破るしようとしました

      5pm

    フォームは、私がすべての顧客のすべてのウェブフォームに使用するwordpress plugin formidable pro formsによって強化されていて、すばらしいです。その中には、ログインしたユーザーの「下書き」を保存する機能を備えた制作ノートフォームがあります。私はフォームにアクセスする必要があるすべてのスタッフに同じユーザーを与えて、フォームの下書きを追加して保存できるようにするという考えです。

    フォームは、カスタムページテンプレートを使用してページ上に存在します。

    <script type="application/javascript"> 
    
    function send_production_notes($) { 
        if($('.production-date-field input').val() == '') { 
         return; 
        } else { 
         $('#production-submit').click(); 
        } 
    }; 
    
    </script> 
    

    スクリプトは、それが空だかどうかを確認するために、日付フィールドをチェックし、そうでない場合、送信ボタンをクリックした:私はjavascriptの提出ボタンをクリックするために、次のコードを使用しています。アイデアは、共有するメモがあれば、日付フィールドに日付を常に追加するということです。そうすれば、そのように訓練されます。

    その後、私はcronジョブをスケジュールに取り組んだ:UNIXタイムスタンプが間違っているので

    register_activation_hook(__FILE__, 'ag_send_production_notes_scheduler'); 
    
    function ag_send_production_notes_scheduler() { 
    if (! wp_next_scheduled ('ag_send_production_notes')) { 
        //Schedule the event, then to repeat daily using the hook 'ag_send_production_notes' 
        wp_schedule_event('1485540300', 'daily', 'ag_send_production_notes'); 
    } 
    } 
    
    //Hook our function , ag_production_notes(), into the action ag_send_production_notes 
    add_action('ag_send_production_notes', 'ag_production_notes'); 
    function ag_production_notes(){ 
    
    if(is_page('production-notes')) { 
    echo '<script type="application/javascript">send_production_notes();</script>'; 
    } 
    } 
    

    wp_schedule_eventの詳細を無視し、私はいくつかの異なるものをしようとしていました。テスト中に私は関数に簡単なPHP電子メールを追加し、それがトリガされ、期待どおりに送信されたので、私はcronの仕事が分かっています。

    JavaScript関数が動作することも知っています。私は、jQuery(document).ready()ハンドラで関数をラップすることでページ上でテストしました。日付フィールドが空の場合、何もしませんでした。しかし、もし私が日付フィールドを追加したら、それは必要なように提出されたドラフト(ページをリフレッシュしたもの)を保存しました。しかし、誰かが実際にページを読み込まないで実行する機能が必要なので、私はそうすることはできません。

    私は私のコードに根本的に何か間違っているか、いくつかの基本的な考え方が欠けていると思います。私はまた、PHP is_pageの条件については確信していませんでしたが、関連するページでのみjavascriptを実行する必要があると私は研究していました。

    最後に、JavaScriptの送信機能を毎日午後5時に起動できるようにするには、cronジョブが必要です。私はそれが可能かどうか、または私のようなjavascript/jQuery newbの方が良いかどうかはわかりません。これはまた、私がWordpress cronジョブを使いこなしたのも初めてですが、誰かがサイトを訪問したときにだけ解雇されることはわかっています。私たちの問題ではありません。

    私のfunctions.phpファイル内に完全な機能が必要なのか、本番ノートページ自体にあるのか分かりません。

    また、ドキュメントから恐ろしい書式の動作を確認しましたが、書式を提出したり、草稿をエントリに変換した動作がありませんでした。あなたの時間と建設的な助けをありがとう!

  • 答えて

    0

    ここでのアプローチは、誰か他の人のドラフト(誤っているかどうかは分かりません)を想像してみましょう!)、私はあなたがその問題についてどうやっていくのかについて少し変更を提案します。

    私はこれに任されていましたが、私のアプローチは、作業員にメモを入力させ、フォームを提出させることです。バックエンドでは、データベースのフィールドに「作成日時」を格納し、タグ付きエントリを作成します。たぶんプラグインがこれをしているのでしょうか?多分更新する必要がありますか?

    この時点で、あなたの午後5時のcronジョブは、その日のすべての提出物を集め、コンパイルし、適切な電子メール配布リストにコンパイルするように送信します。

    データを保持するか、その日に廃棄するかを決定できます。私の個人的な勧告はそれを維持することです。後で参照するようにしておくこともできますし、各従業員がサーベンス・オクスリー法を遵守している特定のユーザーにログインできるようにすることができるので、ユーザーはどのくらい多くの投稿を表示するかを示すレポートツールを作成することもできます。

    彼らは、それがあるべき時間にコンパイルと転送を設定する置くことができますしながら、


    編集1あなたは、あまりにも多くのデータを持っていないので、彼らはすべてのものを提出していないことができます。具体的に時間を作成します。

    日付の計算には関数のセットを使用し、指定された時刻にスクリプトを実行するにはSetIntervalを使用します時間。我々は時間を過ぎている場合は、移動我々は(24時間形式であなたの場合は午後5時)をチェックされている日付/時刻を設定し

    1. 以下のコードは、これらのアクションを実行します我々は、書き込み時に私たちのタスクを実行するために私たちのタスク

    2. 当社の機能を実行するために私たちの関数を呼び出している場合は、実行

    3. を防ぐために、先に24時間をチェックし、DOMでそれのIDハンドルによってページ上のフォームを送信します。

      var now = new Date();

      var millis_until_cutoff = new Date(now.getFullYear()、now.getMonth()、now.getDate()、17、0、0、0) - now;

      IF(millis_until_cutoff < 0) {// ITがその日の私達の時間を過ぎて、TIL TOMORROW millis_until_cutoff + = 86400000をホールドオフであります; } // END IF MILLIS_UNTIL_CUTOFF

      //指定された時間 のsetTimeout(submit_production_form()、millis_until_cutoff)で私達の機能を実行します。

      function submit_production_form() { $( '#production_form_id')。submit(); } // END FUNCTIONのSUBMIT_PRODUCTION_FORM

    これはあなたが達成しようとしているものを処理する必要があります。あなたのプラグインは、フォームを実行しているページにこれを挿入し、そのフォーム内のフォームのID(#)を変更する必要があります。また、この方法にはいくつかの問題があることを覚えておいてください。このページに複数のウィンドウが開いていると複数の送信が行われ、このページを開いた複数のユーザーはそれぞれの編集内容を見ることができません。

    +0

    私は異なった視点に感謝します!私はこの代替案を探求しますが、現在の私のアプローチがうまくいくかどうかも見たいと思います。データベースクエリとforeachを使用して特定のフォームから毎日のエントリを取得して表示することができますが、それを別の電子メールに取り込むことができます。私はミスについて心配しているスーパーではないが、あなたはポイントがある。私たちの状況では、参照や報告のためにデータを保存する必要はありませんが、良いアイデアです!私の現在のアプローチを有効にするための提案はありますか?フィードバックいただきありがとうございます。 –

    +0

    こんにちは、私の答えに編集を追加しました。残念ながら、Javascriptはウェブページの表示に「コードの書式設定」を適用しませんが、正しくフォーマットされたjavascriptにアクセスできます: – Danoweb

    +0

    うわー、これは素晴らしいです - 時間を割いていただきありがとうございます!これを正しく理解するには、このjavascriptをプロダクションフォームページに挿入するプラグインを使用するか、ページテンプレートの

    関連する問題