我在WordPress页面上有一张世界地图。我想根据点击地图的区域将特定的帖子加载到页面上。我写这个作为我的网站的插件。这是我现在拥有的:
index.php:
function get_post_data(){
// Switch based on region
switch($_REQUEST['region']) {
//Asia
case 'China':
case 'Japan':
class Post{
function get_post(){
global $more;
$more = 0;
query_posts('p=122');
if(have_posts()) : while(have_posts()) : the_post();
the_title( '<h2>', '</h2>' );
the_post_thumbnail('medium');
the_content( '<p>', '</p>' );
endwhile;
endif;
wp_reset_query();
}
}
break;
//Middle East
case 'Pakistan':
case 'Afghanistan':
class Post{
function get_post(){
global $more;
$more = 0;
query_posts('p=123');
if(have_posts()) : while(have_posts()) : the_post();
the_title( '<h2>', '</h2>' );
the_post_thumbnail('medium');
the_content( '<p>', '</p>' );
endwhile;
endif;
wp_reset_query();
}
}
break;
//etc
}
$post = new Post();
$post->get_post();
echo json_encode($post);
die();
}
add_action('wp_ajax_get_post_data', 'get_post_data');
add_action('wp_ajax_nopriv_get_post_data', 'get_post_data');
?>
start.js:
onRegionClick: function(element, code, region)
{
$.ajax(get_data.ajaxurl, {
data: {region: region, 'action': 'get_post_data'},
dataType: 'json',
success: function(response) {
$("#post").html(response);
}
});
}
AJAX响应返回所有与我想要的帖子相关的标记,但它没有将其输出到#post-div。所以我知道AJAX、开关和映射都设置正确。我只是不知道如何将WP帖子分配给一个变量,然后我可以用JSON输出。我认为这与get_the_content()有关,但我不确定如何正确使用它…。
修改以下内容,它应该可以工作:
-
不要使用
query_posts
。对于这种查询,get_posts()
是一个很好的查询。但由于您只发布了一个帖子,那么get_post()
就足够了。 -
您正在复制类的声明,并将其隐藏在开关中。它应该转到根目录并将post ID传递给自定义方法
get_post( $ID )
。
它会是这样的(未经测试):
class Post{
function get_post( $ID ){
$html = '';
$post = get_post( $ID );
if( $post ) {
$html = $post->post_title;
$html .= wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
$html .= $post->post_content;
}
return $html;
}
}
function get_post_data(){
$post = new Post();
$result = '';
switch( $_REQUEST['region'] ) {
case 'China':
case 'Japan':
$result = $post->get_post( 122 );
break;
case 'Pakistan':
case 'Afghanistan':
$result = $post->get_post( 123 );
break;
}
echo json_encode($result);
die();
}
add_action( 'wp_ajax_get_post_data', 'get_post_data' );
add_action( 'wp_ajax_nopriv_get_post_data', 'get_post_data' );