这是一个页面,它是 wordpress 支持的网站:
您选择了一些值,它会对相同的页面进行POST,并根据您选择的值创建一个列表页面。
现在,在你跳入我的代码之前,我只想说我是一个新手,我的主要问题是数据库查询,所以我没有专注于其他小东西(比如束起来如果是在内联css和类似的东西)。
所以这是我的模板:
这是来自functions.php的函数,我在模板中使用:
这个页面以我想要的方式工作,我只是把所有代码放在一起,但有一个问题。一旦我解决了这个问题,我将使代码变得更好......:)
所以问题是,如果你查看一旦你做出选择并提交后列出的页面,就会有很多值,即使这些值存在,也会丢失一些值(打开该列表中缺少某些值的页面)价值,你几乎可以看到相同的东西,但现在它显示所有的数据。)
这就是我需要帮助调试的部分。我真的不知道如何解决这个问题。
这个问题的第二部分很简单:我如何对此页面进行分页?任何链接,提示,教程都会很好。
还有一件事,我怎么能有像这样的链接:
... /旅馆/?研究所=贝尔格莱德
当用户打开该页面时,他不必点击选择城镇,它会列出“Beograd”中的所有页面?我猜那是GET请求吧?我可以用POST做类似的事吗? O_o不知道该怎么做,就像我说的新手一样。
感谢阅读,期待答案和评论。
干杯!
答案 0 :(得分:1)
您可以设置功能以在WP中启用分页,而无需执行任何自定义逻辑。
请参阅:http://codex.wordpress.org/Template_Tags/query_posts#Pagination_Parameters
答案 1 :(得分:1)
当用户打开该页面时,他不必点击选择城镇,它会列出“Beograd”中的所有页面?我猜那是GET请求吧?我可以用POST做那样的事吗?
是肯定的。是。没有。
GET请求从url中检索变量。所以你只需运行一个带有GET变量的链接,php就会显示你的信息。但如果您使用POST,则变量将从“后台”中检索,并由上一页传递。因此,您不能只运行链接,必须从上一页(通过表单)调用页面,否则页面将无法访问变量。
答案 2 :(得分:1)
1)我只是通过在查询中实现&paged='.get_query_var('paged')
来修复分页。现在它看起来像这样:
$hostels = new WP_Query('post_type=page&meta_key=Grad&meta_value='.$grad.'&posts_per_page=60&orderby=title&order=ASC&paged='.get_query_var('paged'));
@ js1568我给了他+1的答案,但他没有回答我的整个问题。
现在我可以浏览这样的页面:
/acommodation/hostels/?city=beograd - this is page 1
/acommodation/hostels/page/2/?city=beograd - this is page 2
/acommodation/hostels/page/3/?city=beograd - this is page 3
etc...
2)将某些页面中缺少信息的问题通过将其置于内循环的结尾以下来修复:
wp_reset_query();
我还创建了一些自定义函数,它将获取给定帖子ID的所有元值:
function custom_get_meta_values($id){
$first_array = get_post_custom_keys($id);
foreach ($first_array as $key => $value) :
$second_array[$value] = get_post_meta($id, $value, FALSE);
foreach($second_array as $second_key => $second_value) :
$result[$second_key] = $second_value[0];
endforeach;
endforeach;
return $result;
}
在我的内循环中,我将这个函数称为:
$result = custom_get_meta_values($post->ID);
然后我只是回应我需要的东西:
echo $result['Mail'];
只需将元字段的名称放在$ result数组中并回显它。
3)我用GET请求替换了POST,所以现在我可以有这样的链接:
/acommodation/hostels/?city=beograd
打开时会显示来自'beograd'的每个宿舍。我只有4个可能的城市值,所以如果我从GET请求捕获的'city'的值不是这4个值中的一个,我什么都不做,只显示该表单。如果它是我取该值并显示该城市的列表。
根据Will指示,我会将此答案标记为已接受。