Część główna pluginu.
<?php
/**
* Plugin Name: ajax plugin api
* Plugin URI: http://dobsondev.com
* Description:Rekonstrukcja AJAx LOGIN
* Version: 0.666
* Author: PABLOZZZ
* Author URI: https://websitecreator.pl
* License: GPLv2
*
*
*/
//shortcode – obsluga ajax po stronie front endu
function ajax_shortcode ($ajax_shortcode){
$options = get_option( ‚option_settings’ );//pobranie wartosc z bazy danych ,parametr nazwa zarejeestrowanej opcji
$ajax[‚id_text_field_ajax’] = $options[‚id_text_field_ajax’]; //przekazanie aktualnej wartosci wpr do pola opcji
//wartoscia id tablicy id pola opcji
$delete = array(‚message’,'{‚,’}’,’"’,’:’,’\t’);//wksaznie nie pozadanych znakow w lancuchu
//UWAGA!!! zastasowalem json_encode poniewaz str_replace nie chce dzialac na //wp_json_send
//*
Funkcja php json_encode odpowiada za przesyłanie wartośći z php na js. Jej odpowiednikiem w WP jest wp_jason_send jednak ze względu na problemu z zastosowaniem na niej funkcji php str_replace ( usuwanie niepożądanych znaków) postawiłem na natywną funkcję php. Parametry json_encode: tablica asocjacyjna gdzie kluczem jest nazwa obiektu która będzie reprezentowała przyporządkowaną wartośc w js, u nas jest to wpisywany text w formularzu. Klucz message będzie widoczny w odpowiednim framgmencie pliku js.
*/
$json_string = json_encode(array( ‚message’ => $ajax[‚id_text_field_ajax’]));
$json_phrase = str_replace ($delete, ‚ ‚, $json_string ); //zastapienie niechccianych znakow pustym miejscem w json_encode
/* uwaga do lancucha dodaja sie tabluatory i puste spacje ussun je , sprawdz wtyczke google maps przy opcjach, tam jest funkcja usuwaajca puste miejsce */
$ajax_shortcode = $json_phrase;//oczyszczony lancuch json_encode staje sie parametrem "printujacym sie" ajo tresc //shortcoda
return $ajax_shortcode;
}
add_shortcode(‚ajax-shortcode’,’ajax_shortcode’);//dodanie shortcoda , param:nazwa shortcoda, callback-handle
/*
* Create the admin menu item
*/
add_action( ‚admin_menu’, ‚ajax_login_create_admin_page’ );//popiecie pod hak admin_menu f., obslugi menu
function ajax_login_create_admin_page() {
add_menu_page(//dodanie menu do panelu admina WP
‚AJAX Tester’,//lancuch wyswietlany w tagach html title na stronie panelu admina
‚AJAX Tester’,//nazwa menu w panelu admina
‚manage_options’,//sposob dostepu (uprawnien – capbility)usera do obslugi wtyczki, tutaj: full acces
‚ajax-plug’,//wartosc slug wtyczki pojawiajaca as ie w adresie url wtyczki
‚callback_ajax_admin_page’//f., callback menu fizycznie printujaca panel wtyczki
);
}
/*
Część dotycząca formularza ustawień , rejestracji sekcji opcji ustawień itp. szerzej omawiam to w artykule poświeconym tworzeniu wtyczek “Paste_link_plugin”
*/
add_action( ‚admin_init’, ‚ajax_settings_init’ );//podpiecie pod hak init rejestracje grup opcji, nazwy opcji , sekcji pol
function ajax_settings_init( ) {
register_setting( ‚optionGroup’, ‚option_settings’ );//wp rejestracja ustawien , param: nazwa grupy opcji, nazwa opcji
add_settings_section(//dodanie sekcji
‚ajax_id_section’, //id sekcji
‚Opis sekcji ajax’ ,//opis sekcji( printujacy w panelu wtyczki)
‚ajax_section_callback’, //callaback sekcji printujacy sekcje w html
‚optionGroup’//nazwa grup opcji
);
add_settings_field( //dodaanie pola
‚id_text_field_ajax’, //id pola
‚Wpisz text’ ,//opis pola printujacy sie pos tronie panelu wtyczki
‚callback_ajax_field_render’, //callback renderujacy pole w html
‚optionGroup’, //przynalaeznosc pola do danej grupy opcji
‚ajax_id_section’ // nazwa id sekcji do jakiej to pole prynalezy
);
}
function ajax_section_callback() {
echo ‚AJAX section callaback’ ;
}
function callback_ajax_field_render( ) {
$options = get_option( ‚option_settings’ );//pobranie opcji( nazwy opcji), jest to jedn ., nazwa tablicy
?>
<textarea id ="text" name=’option_settings[id_text_field_ajax]’><?php echo trim($options[‚id_text_field_ajax’]);?></textarea>
<?php }
//html admin
function callback_ajax_admin_page(){ ?>
<?php settings_errors();//wyswietla stan zapisu danych WP?>
<form action=’options.php’ method=’post’>
<p class="value">value : </p>
<div id="result">status : </div>
<h2>Ajax text</h2>
<button id="click">send</button>
<?php //renderowanie formularza WP plugin API
settings_fields( ‚optionGroup’ );//pobranie na wyjsccie pol , sekcji ,nonce itd
do_settings_sections( ‚optionGroup’ );//renderowanie fizyczne sekcji i pol
submit_button();// renderowanie przycisku zapisania parzmetroow
/*Wstawiamy pole typu nonce poprzez funkcje wp_nonce_field. Funkcja ta wstawi dwa ukryte tagi input ze specjanie wygenerowanym kluczem. Jest to forma zabezpieczenia przed atakami hakerskimi , WP będzie pewien że wszelkie treści pochodzą z tego właśnie konkretnego formularza a nie obcego. Warto podejrzeć wygład tych pól w firebugu.*/
?>
<?php wp_nonce_field( ‚action-nonce’,’nonce-name’ );//dodanie pol nonce, wygeneruje dwa pola input typu hidden, //zabezpieczenie przed wysylaniem danych z innego formularza nie nazlezacego do biezacej strony
//param: nazwa akcji, wartosc id oraz name atrybutow inputa?>
</form>
<?php }
//obsluga ajax po stronie back end
function ajax_handle(){
if( ! wp_verify_nonce( $_REQUEST[‚pluginnonce’], ‚nonce-name’ ) )// $_REQUEST odczytywanie zmiennych żądań http
wp_send_json_error();//WP – zglaszanie bledu przeslania formatu json
/* else
wp_send_json_success( array(‚script_response’ => ‚AJAX Request Recieved’) ); */
$options = get_option( ‚option_settings’ );//pobranie wartosc z bazy danych
$ajax[‚id_text_field_ajax’] = $options[‚id_text_field_ajax’];
$json_hash = array( ‚message’=>$ajax[‚id_text_field_ajax’]);
$json_phrase = wp_send_json( $json_hash );
echo $json_phrase;
die();
}
//wykonywanie ajax po stronie php
add_action( ‚wp_ajax_ajax_handle’, ‚ajax_handle’ );
add_action( ‚wp_ajax_nopriv_ajax_handle’, ‚ajax_handle’ );
//rejestracja, przesylanie parametrow oraz kolejkowanie ajax
function ajax_enqueue() {
/* rejstracja skryptu, param:id skryptu, wsk adr url skryptu:param:folder z plikiem, file- dynmaiczne zwr adr biezacego folderu(wbud stala php), zgloszenie ze jquery jest nadrzedna obsluga skryptu */
wp_register_script( ‚ajax-script’, plugins_url( ‚js/ajax-script.js’, __FILE__ ),array(‚jquery’) );
//////////////przesylanie parametrow do skryptu ajax/////////////////////////////////////////
//param: id skryptu , nazwa parametru, tablica z wartoscia przekazywanego parametru
//przykladowe odwolanie po stronie ajax jq- ajax_login_oject.ajax_url tutaj: wskazanie url na ktory maja byc przeslanae //dane do obslugi:admin ajax php
wp_localize_script( ‚ajax-script’, ‚ajax_object’, array(
‚ajaxurl’ => admin_url( ‚admin-ajax.php’ ),
‚pluginnonce’ => wp_create_nonce(‚nonce-name’),
));
///////////////////////////////////
// wp_enqueue_script (‚jquery’);
wp_enqueue_script (‚ajax-script’);
}
//wymagany wp print script a nie enqueue scripts
add_action(‚wp_print_scripts’, ‚ajax_enqueue’);
?>
Plik JS
jQuery(document).ready(function($) {
$(‚button#click’).click( function(e) {
var text = $(‚#text’).val();//pobranie wartosci z textarea
$.ajax({//żądaanie ajax
type: ‚POST’,// spsosb przesla nia aparametrow do aajax
url: ajax_object.ajaxurl,//url pod jakaim parametry maaja byc przetwarzanae
data: {action:’ajax_handle’,pluginnonce:ajax_object.pluginnonce,text:text },//dane do przeslanaia, param: action- //callabck //f.,po stronie php, //przesylane parametry
dataType: ‚json’//format przeyslanych danych
})//aby sprawdzic dzialnaie error ajax wprowadz np jakis znak przed <?php , na poczatku pliku pluginu
.error(function(jqXHR, textStatus, errorThrown) {
alert(‚An error occurred… Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!’);
/* jqXHR- dpowiednik natywnego XMLHttpRequest z klasycznego java script:
Obsługuje do nagłówków HTTP (typy Last-Modified , etag , Content-Type , mim etc …) .
Obsługuje wywołania zwrotne na żądanie ( w tym obietnica Callbacki .done ( ) , .fail ( ) etc …)
Obsługuje wszystkie filtry wstępne określone dla żądania .
Obsługuje on żadnych limitów czasu ustanowionych na zamówienie.
Obsługuje on żadnych poprzecznych połączeń domen ( w tym jsonp ) .
status – wsyswietla zakodowany satus przeslania ajax tutaj 200- czyli blad
errorThrown- printowanie wyjasnienia bledu
responseText- wartosc przesylana przez ajax printowanie jeej*/
$(‚#result’).html(‚<p>status code: ‚+jqXHR.status+'</p><br><p>errorThrown: ‚ + errorThrown + ‚</p><p>jqXHR.responseText:’+jqXHR.responseText + ‚</p>’);
console.log(‚jqXHR:’);
console.log(jqXHR);
console.log(‚textStatus:’);
console.log(textStatus);
console.log(‚errorThrown:’);
console.log(errorThrown);
})
.done(function( msg ) {//akcja podejmowana w razie powowdzenia
$(‚.value’).html(‚value is: ‚+ msg.message );//printowanie przeslanych parametrow
//console.log("Data Saved: " + msg.message);
// alert( "Data Saved: " + msg.message);
})
e.preventDefault();//zatrzymanie domyslnych dzialan przegladarki na klikniecie buttona( zapisanie danych bez podjecia //wymaganych akcji)
});
/* sprobowac zastosowanie metody serialize */
});