WordPress Ajax-Techniken

Lesezeit: 2 Minuten

Benutzer-Avatar
Hynek Zatloukal

Ich habe kürzlich mit der Implementierung von AJAX in WordPress gespielt. Ich weiß, dass es viele Plugins gibt, aber ich wollte es selbst machen.

In Artikeln zu AJAXified WordPress empfehlen die meisten Leute die Verwendung admin-ajax.php um AJAX-Anfragen zu verarbeiten. Meine erste Idee war, einfach benutzerdefinierte get_header() und get_footer() zu erstellen.

1. Weg

// Boolean function ?ajax=true
function is_ajax () {
  if($_REQUEST['ajax']) {
    return true;
  } else {
    return false;
  }
}

function ajax_get_header () {
  if(is_ajax()) {
    get_header('ajax'); 
    /* Insert header-ajax.php which
    includes only google analytics tracking code and some minor stuff */
    return true;
  } else {
    get_header();  
    // Standard header
    return true;
  }
}

/* Function ajax_get_footer() pretty much the same */

Dann würden Seitenvorlagen aussehen

<?php ajax_get_header(); ?>

<!-- Content -->

<?php ajax_get_footer(); ?>

Und natürlich Ajax-Aufrufe auf die übliche Weise zu tätigen. Diese Methode sieht für mich einfach und sauber aus. Andererseits empfehlen viele Leute, die integrierte Funktion zu verwenden, indem sie einen Hook erstellen, um AJAX-Aufrufe abzufangen.

2. Weg

function process_ajax(){
  /* Show the page or whatever */
}
add_action('wp_ajax_nopriv_ajax', 'process_ajax');
add_action('wp_ajax_ajax', 'process_ajax');

Und AJAX-Aufrufe auf admin-ajax.php verweisen

Welches verwenden?

Ich habe beide Methoden ausprobiert und festgestellt, dass die erste Methode bemerkenswert schneller lädt als die letztere. Unter gleichen Bedingungen dauerte der 1. Weg (ajax_get_header) ungefähr 400 ms, um eine Seite zu laden (fast kein Inhalt) und der 2. Weg (admin-ajax.php) ungefähr 800 ms. Ich weiß nicht warum, beide Wege laden den WP-Kern und machen fast dasselbe.

Also, ich frage Sie, gibt es einen ernsthaften Grund, AJAX-Aufrufe über admin-ajax.php zu tätigen? Ist es notwendig? Und warum dauert es länger, einen Anruf auf dem empfohlenen Weg zu bearbeiten?

  • Ich denke, Sie würden einige Antworten erhalten WordPress-StackExchange

    – Brasilo

    9. Dezember 2012 um 3:01 Uhr


Ihr erster Weg wird immer schneller sein als das eigene Ajax von WordPress, da admin-ajax.php sich um viele andere Dinge kümmert, wie z Core-Admin-Hooks und andere Funktionsaufrufe, was wiederum den ganzen Ajax-Aufruf ziemlich groß macht.

Erstens kümmern Sie sich um nichts anderes als Ihre eigenen Funktionen und Ausgaben. Das erhöht die Leistung.

Es gibt keine feste Regel, was zu verwenden ist. Die erste Möglichkeit, Dinge schneller zu erledigen, ist jedoch nicht mit den Kernverwaltungsfunktionen von WordPress koppelbar, was für einige Zwecke ein Nachteil sein kann.

Siehe admin-ajax.php

$core_actions_get = array(
'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache',
'autocomplete-user', 'dashboard-widgets', 'logged-in',
);

$core_actions_post = array(
'oembed-cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link',
'delete-meta', 'delete-post', 'trash-post', 'untrash-post', 'delete-page', 'dim-comment',
'add-link-category', 'add-tag', 'get-tagcloud', 'get-comments', 'replyto-comment',
'edit-comment', 'add-menu-item', 'add-meta', 'add-user', 'autosave', 'closed-postboxes',
'hidden-columns', 'update-welcome-panel', 'menu-get-metabox', 'wp-link-ajax',
'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink',
'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order',
'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post',
'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment',
);

1368490cookie-checkWordPress Ajax-Techniken

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy