web-dev-qa-db-ja.com

silexを実行するか、ワードプレスでスリムにする

私はWordPressでテーマを実行しています。このテーマでは、応答を期待しているところでAJAX呼び出しを行っています。 ( http://example.com/capis/v0/packages/

上記のHTTPコールを処理するために、httpサーバーとしてsilexを使用しています。

index.php

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Silex\Application;

$app = new Silex\Application();

$app->POST('/capis/v0/packages/', function(Application $app, Request $request) {
            # logic            
            return new Response('HELLO');
            });
$app->run();

私はajax呼び出しにデータを提供している8080ポートでサーバーを実行するためにphpを使用しています。

php -S localhost:8080 -t web web/index.php

今、私はWordPressのみを使用してこれらのAjax呼び出しを処理したいと思います。私は特定のPHPサーバーを実行したくありません。

10
Prashant Gaur

SilexサーバーではWordpressではできないことはほとんどありませんが、WP呼び出しに応答するためにAJAXを取得するには少し手間がかかります。

最初のステップはAJAXを通して通話を利用可能にすることです。これはあなたのfunctions.phpファイルに次のような行を追加する必要があります。

add_action('wp_ajax_my_ajax_call', 'onno_update_my_ajax_call');

この電話がゲストと顧客(すなわちADMINではない)に発信される場合は、回線も必要になります。

add_action('wp_ajax_nopriv_my_ajax_call', 'my_ajax_call');

これは同じことを行いますが、より包括的です。

次のステップは、Ajax呼び出しを作成することです。あなたはそのような呼び出しの例を与えないので、私がすることができるすべては $ wpdb のためのドキュメントを見ることをあなたにアドバイスすることです。 WPはデータベースから情報を取得するための、そして複雑な問い合わせのための包括的な呼び出しのセットを持っています。

AJAXロジックは関数my_ajax_call()に入り、結果は配列またはオブジェクトに配置されます。関数の最後の行は、wp_send_json_success($ return)への呼び出しです。ここで、$ returnは、返される情報のオブジェクトまたは配列です。

このシステムを使用して、私は店主がWooCommerceデータからの補充のための購買注文とバリエーションのためのサイドロードギャラリーを構築することを可能にするためにwp_adminセクションにページを追加することができました。

これは簡単な例です。

function my_ajax_call() {
    $return['data'] = date('Y-m-d');
    wp_send_json_success($return);
    wp_die();
}

そしてJavaScriptでは、より多くのステップが必要です。 1つには、WP AJAXというURLが必要です。通常は/wp-admin/admin-ajax.phpですが、多少異なる場合があります。それは多くの場合、グローバルなajaxurlとしてJavascriptで利用可能になります。あるいはwoocommerce.ajaxurlのような別のオブジェクトに隠されるかもしれません。あなたの関数とAJAX呼び出しに渡す必要があるかもしれない他の変数を指すaction要素でJavascriptオブジェクトを構築する必要があります。例えば:

data = {'action':'my_ajax_call'}

または

data = {'action':'my_ajax_call', 'todo':'getDate'}

(function($){
    $.ajax{
        url:ajaxurl,
        data: data,
        success: function(trn) {$('#data').html(trn.data)}
})(jQuery)

HTH

1
Mark Cicchetti