Навіщо використовувати admin-ajax.php і як це працює?


9

Мій виклик Ajax для даних json працює нормально, як і ці функції.php:

add_action( 'wp_ajax_nopriv_load-filter', 'prefix_load_cat_posts' );
add_action( 'wp_ajax_load-filter', 'prefix_load_cat_posts' );
function prefix_load_cat_posts () {
  //get data here
}

javascript:

var ajaxurl = 'http://'+window.location.host+'/wp-admin/admin-ajax.php';
jQuery.ajax({
    type: 'POST',
    url: ajaxurl,
    etc.

У мене 2 питання.

1) Навіщо використовувати admin-ajax.php замість кодування свого json в окремому файлі, як themes/example/json.phpі кодувати там ваші дані?

2) Як працює admin-ajax.php? Я не дуже розумію з цього файлу. Чи завантажує він усі функції, щоб ви готові ними користуватися?

Дякую!


2
Зверніть увагу, будь-яка відповідь буде говорити про те, чому themes/example/json.phpслід вважати основну вразливість безпеки
Том Дж. Ноуелл

Відповіді:


14

1) Навіщо використовувати admin-ajax.phpзамість кодування свого json в окремому файлі, як, наприклад, themes/example/json.phpта кодувати ваші дані там?

Використання admin-ajax.phpозначає, що ядро ​​WordPress завантажено та доступне. Втім, вам потрібно буде вручити потрібні вам файли, що є складним процесом і схильним до відмови, якщо ви не дуже добре знаєте Core. І наскільки ви хороші з захистом Javascript?

2) Як admin-ajax.phpпрацює? Я не дуже розумію з цього файлу. Чи завантажує він усі функції, щоб ви готові ними користуватися?

  1. Він завантажує WordPress Core, тобто ви можете використовувати такі речі, як $wpdb і $WP_Query. Це приблизно через рядок 25.
  2. Він надсилає кілька заголовків-- рядків 37 - 41.
    1. Заголовок типу вмісту
    2. Заголовок, щоб вказати браузерам не кешувати результати
    3. Цікаві заголовки - це ті, надіслані користувачем send_nosniff_headers()
    4. і nocache_headers().
  3. На admin_initгачок пожеж.
  4. Основні дії визначаються та реєструються динамічно - рядки 46 - 73. Вони не будуть зареєстровані, якщо вони не потрібні - тобто, якщо їх не буде запитано через $_GETабо $_POST.
  5. Активізований гачок API "серцебиття" - рядок 75
  6. Перевіряється статус "входу в систему" запитуючого користувача, а відповідний адміністративний або гачок "без приватного права" не запускається.

Елементи №1 та №6 є головними причинами використання API AJAX, на мою думку. У вас є WordPress Core, який вам майже напевно потрібен, і ви маєте таку ж систему безпеки входу, що і для решти WordPress.


6

admin-ajax.phpє частиною API WordPress AJAX , і так, він обробляє запити як із бекенда, так і з фронту. ось що я з'ясував для вашого питання, що таке:

2) Як працює admin-ajax.php?

для логіки ви можете відвідати тут.

Це передбачає, що ви вже знаєте, як запросити JavaScript тощо.

Частина JavaScript:

jQuery(document).ready(function($) {

    // We'll pass this variable to the PHP function example_ajax_request
    var fruit = 'Banana';

    // This does the ajax request
    $.ajax({
        url: ajaxurl,
        data: {
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            // This outputs the result of the ajax request
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });   

});

PHP шт.:

function example_ajax_request() {

    // The $_REQUEST contains all the data sent via ajax 
    if ( isset($_REQUEST) ) {

        $fruit = $_REQUEST['fruit'];

        // Let's take the data that was sent and do something with it
        if ( $fruit == 'Banana' ) {
            $fruit = 'Apple';
        }

        // Now we'll return it to the javascript function
        // Anything outputted will be returned in the response
        echo $fruit;

        // If you're debugging, it might be useful to see what was sent in the $_REQUEST
        // print_r($_REQUEST);

    }

    // Always die in functions echoing ajax content
   die();
}

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

// If you wanted to also use the function for non-logged in users (in a theme for example)
 add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

1) Навіщо використовувати admin-ajax.php замість кодування свого json в окремому файлі, наприклад теми / example / json.php та кодувати там ваші дані?

це може бути корисно. admin-ajax.php vs Спеціальний шаблон сторінки для запитів на Ajax


Гей, чи можете ви пояснити ці гачки дій "wp_ajax_example_ajax_request" та "wp_ajax_nopriv_example_ajax_request", я ніде не знаходжу пояснень. Також до чого вирішує ajaxurl? Спасибі
Девід Оквії
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.