在wordpress中使用ajax更新变量

时间:2016-01-08 15:08:17

标签: javascript php jquery ajax wordpress

我在wordpress中显示带日期过滤器的事件。当前日期已预先选定,因此默认情况下会显示当天的事件。如果有人点击另一个日期,我会调用函数newDate。

问题:我成功通过post方法传递新变量,但无法将其传递给php。变量采用unix时间戳格式。

//calendar.js
function newDate(selectedDate){

var sendDate = selectedDate;
    $.ajax({
        type : 'POST',
        url: ajax_date.ajaxurl,
        data: {  
            action: 'submit_date',
            sendDate : sendDate
            }
     });
}

在我的函数php中,我将队列本地化并调用函数

//functions.php   
wp_enqueue_script( 'calendar', get_template_directory_uri() . 
 '/resources/js/calendar.js', array( 'jquery' ), '1.0', true);


wp_localize_script('calendar', 'ajax_date', array(
    'ajaxurl' => admin_url('admin-ajax.php'));

add_action( 'wp_ajax_nopriv_submit_date', 'submit_date' );
add_action( 'wp_ajax_submit_date', 'submit_date' );

function submit_date(){

$newdate = $_POST['sendDate'];
wp_die(); 

};

最后我的php文件用于显示事件。 var_dump打印出null,echo也不显示任何内容。

<div id ="events-container">

<?php

  echo $newdate;

  var_dump($newDate);

?>

编辑 - 已修复 谢谢,它有效,我的代码如下:

//events-page.php
<div id ="events-container">
<?php
 echo get_events($args);
 ?>
</div>

//calendar.js
$.ajax({
        type : 'POST',
        url: ajax_date.ajaxurl,
        data: {  
            action: 'submit_date',
            sendDate1 : date1,
            sendDate2 : date2
        }
    }).done(function(data) {
              console.log( data ); // will log the data you get back from             your PHP function.
              // Now you can display it on the view
              $('#events-container').html(data);
        })

//functions.php
wp_enqueue_script( 'calendar', get_template_directory_uri() . '/resources/js/calendar.js', array( 'jquery' ), '1.0', true);

wp_localize_script('calendar', 'ajax_date', array(
    'ajaxurl' => admin_url('admin-ajax.php')));


//ajax actions

add_action( 'wp_ajax_nopriv_submit_date', 'submit_date' );
add_action( 'wp_ajax_submit_date', 'submit_date' );

function submit_date(){

$newdate1 = $_POST['sendDate1'];
$newdate2 = $_POST['sendDate2'];

$args = array( 
        'post_type' => 'epsa_events', 
        'posts_per_page' => 5,
        'order' => 'ASC',
        'meta_query' => array  (
            array(
            'key' => 'start_time',
            'value' => array($newdate1, $newdate2),
            'compare' => 'BETWEEN'
            )
        ));
    get_events($args);
    wp_die(); 
    };

function get_events($args){
$loop = new WP_Query( $args ); 
while ( $loop->have_posts() ) : $loop->the_post();

  echo '<div class="entry-content">';
      the_title();
      the_content();
      $startTime = DateTime::createFromFormat('Y-m-d H:i',         get_field('start_time'));
  echo date_format($startTime, 'H:i a d.m.');
  echo '</div>';
endwhile;
}

2 个答案:

答案 0 :(得分:2)

您需要对$ .ajax()方法进行回调。现在,您只需将数据发送到您的PHP函数,但您无法将其恢复到正面。

void deal(const Card * const Deck, int value, int size, int size_1, int size_2){

int i, j, length;
char anotherCard[2];
char name1[30];
char name2[30];
int valueName1 = 0, valueName2 = 0, valueDealer = 0;

printf("Name player one > ");
scanf("%s", name1);
printf("Name player two > ");
scanf("%s", name2);

printf("\nWelcome %s and %s, lets begin!\n\n", name1, name2);
getchar();

while (valueName1 < 21 || valueName2 < 21 || valueDealer < 17){
    printf("%s's card:\n", name1);
    for (i = 0; i < size; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');


    if (valueName1 > 21 && Deck[i].value == 11){
        Deck[i].value = 1;                          //error on this line
        valueName1 += Deck[i].value;
        printf("value > %d\n", valueName1);
        }
    else{
        printf("value > %d\n", valueName1);
        }
    }


int main(void){

Card allCards[52];
Card cardValue[52];
char *suitname[] = { "spades", "hearts", "diamonds", "clubs" };
char *deckname[] = { "ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king" };
int cardvalue[] = { 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };



void fillDeck(Card * const Deck, const char *suit[], const char *deck[], const int value[]){

int s;

for (s = 0; s < 52; s++){
    Deck[s].suits = deck[s % 13];
    Deck[s].decks = suit[s / 13];
    Deck[s].value = value[s % 13];
}

return;
}

更多信息:http://api.jquery.com/jquery.ajax/

答案 1 :(得分:1)

您需要在submit_date函数中的$ _POST [&#39; sendDate&#39;]中获取日期之后通过应用WP_Query或您的插件的任何自定义编写函数来处理ajax日期,并且需要在wp_die之前回显处理结果()然后你可以在ajax成功函数中获取数据,并且jquery可以插入你的结果。

您可以在此处查看详尽的指南:

https://www.creare.co.uk/blog/simple-wp_query-ajax