插件架构从API中拉出并在可湿性粉剂网站上创建动态内容?

时间:2013-10-01 作者:Brandon Eley

我正在创建一个自定义插件,该插件连接到外部API,并提取有关公司位置的数据。目前,该插件有一个快捷码,我将其放在一个列出所有位置的“位置”WordPress页面上。

本质上,我只是点击API,提取数据,生成一些HTML并将其返回到短代码。这对于位置页面(/位置)很好,因为它在列表上方有WordPress页面的标题和副本。但对于位置详细信息页面,我需要一个“空白”画布。

我尝试使用add\\u rewrite\\u rule()创建详细信息页面,并通过url段发送额外的查询变量。这是可行的,但将重写规则发送到wordpress页面意味着页面标题和内容仍然会出现。

我应该如何构建这个插件,以便我可以链接到一个URL ie/位置/地址/id,该URL实际上不存在于WP中,而只是动态构建。如果可能的话,我们希望使用“页面”或“帖子”,但要欺骗WordPress使用我们的页面标题和内容HTML。

有什么想法吗?

2 个回复
最合适的回答,由SO网友:Aaron Brazell 整理而成

您可以使用wp_titlethe_title 根据需要筛选以修改该选项。所容纳之物好的,您可以重用内容并将短代码放在后面,或者短代码可以修改the_content...

SO网友:Tom Black

我最近处理过这个问题。

我建议尽早添加一个钩子来识别自定义页面请求,如下所示:

// Function to run before page generation begins
add_action(\'init\',array(\'MyPluginClass\',\'MyInitPublicFunction\'));
那么该函数应该如下所示:

public function MyInitPublicFunction() {
// Custom tag we will be using to recognize page requests
add_rewrite_tag(\'%mycustomtag%\',\'([^/]+)\');
// Custom rewrite rule to hijack page generation
add_rewrite_rule(\'locations/address/([^/]+)/?$\',\'index.php?mycustomtag=$matches[1]\',\'top\');
// Update WP rewrite rules without writing a new .htaccess file
flush_rewrite_rules(false);
}
随后在插件中:

// Allow access to Wordpress query variables
global $wp_query;
// Retrieve Wordpress query variables
$query_vars = $wp_query->query_vars;
// Check if requesting our custom page 
if(!empty($query_vars[\'mycustomtag\'])) {
// CUSTOM PAGE REQUESTED!
$custom_id = $query_vars[\'mycustomtag\'];
die(\'<html><head><title>Not a Wordpress Page</title></head><body>Content here</body></html>\');
}
这不是结束代码的最整洁的方式,您可以使用Wordpress挂钩覆盖标题/等,但您似乎只想提供看起来不像是在Wordpress中生成的页面,所以为什么不完全绕过主题引擎,生成您自己的页面呢?您仍然可以使用Wordpress命令来检索数据,只需确保您的代码在任何输出开始之前运行并结束页面生成。

Don\'t forget! 只要使用“flush\\u rewrite\\u rules”将自定义重写规则推送到数据库中,就可以在任何时候(例如,在插件激活时)添加自定义重写规则。这意味着您可以有一个插件配置,允许您设置特定的自定义页面,或者您可以使用启用了快捷码的页面来激活重写规则,以便将来访问该页面。

结束

相关推荐

使用瞬变API的最佳实践

我最近在Wordpress中遇到了Transients API,希望能提高我正在编写的插件的性能。基本上,该插件将亚马逊产品广告API中的产品详细信息存储在数据库中。产品详细信息使用数组的json编码表示进行存储。现在,我尝试使用transients API,以便每当管理员清除数据库记录时,它也会使用transients API进行更新。我目前正在使用set_transient 方法类似这样:$data = array( \'123\' => \"{\'title\' : \'\', \'