我在Wordpress上有一个网站,我试图找到创建下拉列表的最佳方法,该下拉列表显示来自自定义分类的数据,最终将其集成到不同的网站(也在Wordpress上)。
我去的地方是尝试获取正确的路由/网址以获取此信息。
我有一个名为listings
的帖子类型,其中有一个名为listing_area
的分类,其中有不同的区域,其中关联帖子,例如威尔士,东安格利亚。
到目前为止,我已经决定使用Plugin WP-API(这是否是我不知道的正确的事情,我知道Wordpress现在有一个API在它的新更新)。我设法让这个网址正常运行并引用listing_area
- http://scd.blaze.wpengine.com/wp-json/taxonomies/listing_area/terms/174
这是我要去的测试页面,它依次链接到这些URL -
http://scd.blaze.wpengine.com/test/
我不知道我是否在这里做正确的事情,而且我对它有非常基本的了解,如果有人能指出我正确的方向,我会非常感激!
由于
答案 0 :(得分:3)
您正走在正确的道路上,但如果您可以将网站升级到4.4,我建议您直接使用新的Wordpress REST API。否则你仍然可以使用你的REST插件,因为它几乎是一样的。我将尝试解释如何完成您想要实现的目标(浏览远程Wordpress网站的术语并显示与此术语相关的帖子)。
使用新的WP REST API,这是一个小函数,可用于获取分类术语:
public function getDistantTerms($taxonomy) {
$response = wp_remote_get('http://www.yourwebsite.com/wp-json/wp/v2/terms/' . $taxonomy);
if(is_wp_error($response)) {
return array();
}
return json_decode(wp_remote_retrieve_body($response));
}
在这里,我使用wp_remote_get
函数从REST函数terms
获取JSON返回,方法是将其作为参数传递给分类标本slug(例如:listing_area
) - {{3}它返回的内容。将此功能添加到 functions.php ,然后在模板中使用它来构建您的选择:
<select name="term_select">
<option value="">Please choose a term</option>
<?php foreach(getDistantTerms('listing_area') as $term): ?>
<option value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></option>
<?php endforeach; ?>
</select>
这似乎与你实际上的相似。
因此,下一步是重定向到列出您选择的字词的帖子的页面。首先我们在JS中处理重定向:
$('select[name="term_select"]').change(function() {
if($(this).val() != "") {
window.location = "/show-post-term/" + $(this).val();
}
});
我们添加了一些重写规则来将此网址(将其更改为您想要的任何内容)重定向到我们名称 distant-posts.php 的模板(所有这些都发生在您的主题 functions.php ):
<强> 1。添加重写规则
add_action('init', 'distantposts_rewrite_rules');
function distantposts_rewrite_rules() {
add_rewrite_rule('show-post-term/([^/]+)/?$', 'index.php?term_slug=$matches[1]&distant_post=true', 'top');
}
<强> 2。添加两个查询变量
add_filter('query_vars', 'distantposts_query_vars' );
function distantposts_query_vars($vars) {
$vars[] = 'term_slug';
$vars[] = 'distant_post';
return $vars;
}
第3。如果设置了查询变量,则重定向到模板
add_filter('template_include', 'yourpluginname_blah_template_include', 1, 1);
function yourpluginname_blah_template_include($template) {
global $wp_query;
$distant_post = $wp_query->query_vars['distant_post'];
$term_slug = $wp_query->query_vars['term_slug'];
if($distant_post && $term_slug) {
$tpl = locate_template(array('distant-posts.php'));
if(!empty($tpl)) {
return $tpl;
}
}
return $template;
}
简而言之,我们在这里做的是:我们添加一条处理/show-post-term/term-slug
网址的规则,将其重定向到两个查询变量的索引:一个告诉我们&#39; 34;远程职位&#34;模式和带有术语slug的模式。然后我们将这些查询变量声明为Wordpress,并使用它们来更改Worpdress在设置时应显示的模板。
返回REST API。我们使用GET REST函数here is a demo将它作为GET参数传递给分类法名称作为键,将术语slug作为值传递。 posts
你获得了什么样的回报。
进一步的重要说明:在更新到WP 4.4之后,您需要更改分类声明才能使其正常工作。您需要将参数show_in_rest
设置为true
添加到声明中,并将query_var
设置为true
。
所以我们将这个小函数添加到 functions.php 以从模板中检索帖子:
public function getDistantPosts($taxonomy, $term) {
$response = wp_remote_get('http://www.yourwebsite.com/wp-json/wp/v2/posts?' . $taxonomy . '=' . $term);
if(is_wp_error($response)) {
return array();
}
return json_decode(wp_remote_retrieve_body($response));
}
然后在你的模板中,你这样称呼它:
global $wp_query;
$posts = getDistantPosts('listing_area', $wp_query->query_vars['term_slug']);
然后使用$posts
数组显示您的帖子(它包含常规帖子对象)。
现在您已经建立了上下文,您可能想要做的一些事情:
将缓存添加到REST返回
为了避免主网站服务器过载,您应该考虑缓存REST调用结果。我不会在这里详细说明,因为有一些工作要做,但一个好的开始可能是Here is a demo。
为您的远程帖子模板添加分页
如果您的条款中有很多帖子,则可能需要添加分页。您可以更改远程帖子REST功能,为此添加page
参数 - this script。
添加&#34;单页&#34;为你的远程职位
您可能希望在主网站上为远程帖子设置单独的页面,因为列表模式的文本可能太长。您可以从 distant-posts.php 代码开始,添加post_id
查询var,然后使用REST posts
函数获取您的帖子:{{1} }
要了解WP REST API的基础知识,我强烈建议您访问see the documentation网站。 wpmudev.org上的REST API上有一个wp-api.org,您也可以阅读。如果您需要了解REST基础知识,建议您阅读pretty good article。
希望你能设法通过这个,玩得开心!
答案 1 :(得分:0)
我发现这个网址给了我我需要的结果 -
http://scd.blaze.wpengine.com/wp-json/posts?type=listings&filter[listing_area]=channel
我的帖子类型为listings
,而我的期限为channel