Postare nu se încarcă prin ajax

17 oct. 2011, 19:57:11
Vizualizări: 2.08K
Voturi: 0

Am preluat un site WordPress 3.2.1 care folosește prettyPhoto pentru a încărca conținut prin ajax. Acest lucru funcționa înainte să activez permalink-urile pe site. Pluginul Custom Post Type UI este instalat. Pot accesa tipul meu de postare personalizată la mysite.com/story/numele-povestii dar încărcarea prin ajax rezultă într-o eroare 404.

Linkurile care declanșează codul $.get din prettyPhoto arată astfel:

<a href="<?php echo get_permalink(); ?>&ajax=true&count=<?php echo $count ?>" rel="story[ajax]"><?php echo wp_get_attachment_image($attachment->ID, array(75, 75));?></a>

Dacă schimb setările permalink-urilor înapoi la 'implicit', conținutul postării se încarcă în fereastra popup. URL-urile apelate prin XHR când funcționează arată astfel:

http://mysite.com/?story=numele-povestii&ajax=true&count=37

Am încercat să elimin toți parametrii din query de la URL-urile permalink dar această soluție nu a funcționat. Are cineva vreo idee despre ce ar putea fi problema?

1
Comentarii

Se pare că trebuie să aprofundezi mai mult utilizarea ajax pe site-urile WordPress. Verifică acest link: http://wpajax.com/.

chrisguitarguy chrisguitarguy
17 oct. 2011 20:12:15
Toate răspunsurile la întrebare 1
3

Toate cererile Ajax ar trebui să fie direcționate prin fișierul util /wp-admin/admin-ajax.php.

Acesta funcționează cu minunatul sistem de hook-uri din WordPress. Astfel, trimiteți o "acțiune" (action) cu cererea și utilizați aceasta ca parte a acțiunii în care vă conectați funcția.

Să presupunem că apelul vostru Ajax arată astfel (cu jQuery):

jQuery('a.ajax').click(function(e){
    data = {
        'action': 'wpse31321_action',
        'story': 1 // ID-urile sunt mai ușor de gestionat...
    }
    jQuery.get(
        'http://www.yoursite.com/wp-admin/admin-ajax.php',
        data,
        function(resp){
            // procesați răspunsul.
        }
    );

    e.preventDefault();
});

Apoi, în fișierul functions.php sau într-un plugin, trebuie să vă conectați la wp_ajax_wpse31321_action și wp_ajax_nopriv_wpse31321_action. Aceasta este partea care face treaba: aveți acces la întregul API WordPress în funcția conectată. Puteți obține postări sau orice altceva.

wp_ajax_[some_action] este pentru utilizatorii autentificați. wp_ajax_nopriv_[some_action] este pentru toți ceilalți. [some_action] este, desigur, acțiunea pe care o trimiteți împreună cu cererea. În exemplul nostru, wpse31321_action.

<?php
add_action( 'wp_ajax_wpse31321_action', 'wpse31321_ajax' );
add_action( 'wp_ajax_nopriv_wpse31321_action', 'wpse31321_ajax' );
function wpse31321_ajax()
{
    // aici aveți acces la $_REQUEST, $_POST și $_GET...
    if( isset ( $_REQUEST['story'] ) )
    {
        $story = get_post( (int) $_REQUEST['story'] );
        if( ! $story ) die( '-1' );
        echo $story->post_content;
        die(); // Întotdeauna opriți scriptul după afișarea conținutului necesar.   
    }
    else
    {
        die( '-1' );
    }
}

Puteți face orice doriți pentru a manipula datele înainte de a le afișa. Exemplul de mai sus este foarte simplist, fără prea multă verificare a erorilor sau securitate integrată. Dar ar trebui să vă ofere un punct de plecare.

Lecturi suplimentare:

http://wpajax.com/

http://codex.wordpress.org/AJAX_in_Plugins

http://codex.wordpress.org/AJAX

17 oct. 2011 20:35:45
Comentarii

Mulțumesc pentru răspunsul detaliat. Totuși, ceea ce mă interesează cu adevărat este de ce apelul ajax funcționează cu permalink-urile dezactivate și nu atunci când sunt activate?

codecowboy codecowboy
18 oct. 2011 01:21:12

Ar trebui să vedem mai mult din codul tău pentru a răspunde la această întrebare (ce fac toți acei parametri din URL? Unde se află acel cod?). Dar bănuiesc că este pentru că trebuie să obții permalink-ul real cu șirul de interogare atașat (de ex. http://www.yoursite.com/story/story-slug/?para1=value1&param2=value2, etc).

chrisguitarguy chrisguitarguy
18 oct. 2011 02:10:22

Problema era că vechiul link avea deja '?' în URL, dar acesta nu se afla în permalink după activarea permalink-urilor personalizate. Mulțumesc!

codecowboy codecowboy
18 oct. 2011 11:17:36