我在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()有关,但我不确定如何正确使用它....
答案 0 :(得分:1)
修改以下内容并应该有效:
Don't use query_posts
。对于这种查询,get_posts()
是好的。但是,当你只是拉一个帖子时,get_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' );