我在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;
}
答案 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;
}
答案 1 :(得分:1)
您需要在submit_date函数中的$ _POST [&#39; sendDate&#39;]中获取日期之后通过应用WP_Query或您的插件的任何自定义编写函数来处理ajax日期,并且需要在wp_die之前回显处理结果()然后你可以在ajax成功函数中获取数据,并且jquery可以插入你的结果。
您可以在此处查看详尽的指南: