将发布内容的自定义API集成到管理界面和公共网站

时间:2011-09-26 作者:NetConstructor.com

将问题编辑得更加具体,并添加了悬赏,希望有人有一个可靠的编码解决方案:

所以,这里有一个有趣的任务,我一直在努力寻找解决方案。我已经添加了一个悬赏,我将以工作代码的形式奖励给最佳解决方案。

我在这里试图做的是利用wordpress作为网站所有标准内容的默认CMS。我正在寻找的解决方案涉及我想要的特定“自定义帖子类型”(称为:位置)。对于此自定义帖子类型,我特别希望根据此维基百科页面中每个城市的城市列表数据和内容自动填充帖子和内容:http://en.wikipedia.org/wiki/List_of_cities_in_Los_Angeles_County,_California

现在,我意识到可以从本质上提取每个城市的所有信息,并使用某种类型的导入方法将每个维基百科城市导入wordpress(每个都作为单独的帖子),但这不是我想要的。

我的要求和这份奖金与三个具体目标/组成部分有关:

1) 我需要所有的帖子(位置)和他们的关联内容都来自维基百科,通过他们的API(下面的例子)。这意味着,每当请求与自定义帖子类型“locations”相关的帖子时,都会传递Wikipedia内容(这与主管理区域以及公共网站相关)。来自维基百科的数据应在本地缓存24小时,以确保数据与维基百科的数据保持最新。

2) 对于管理员和网站访问者来说,任何维基百科内容的来源都是透明的。重要的是,管理员保留编辑这些帖子的能力。这意味着,当为这样的位置(post)调用post编辑器时,wikipedia内容将实时拉入并加载到post编辑器中。管理员保存帖子后,wordpress将不再从Wikipedia请求或更新这篇特定帖子的内容,而是从WP数据库本地传递。

3) 需要注意的是,从主题开发人员的角度来看,根本不需要进行任何更改。这意味着请求post或自定义字段的所有典型元素都需要保留并正确运行。最后,在调用模板或管理编辑器时,可以将Wikipedia页面的特定内容“部分”分配给Wordpress使用的特定自定义字段,这一点非常重要。

EXAMPLE Wikipedia API Request Listing all Locations:http://en.wikipedia.org/w/api.php?action=parse&format=xml&pageid=18614608&prop=wikitext|iwlinks|headitems|links|displaytitle|text

EXAMPLE Wikipedia API Request for the content of a specific location page:http://en.wikipedia.org/w/api.php?action=parse&format=xml&page=Los_Angeles&prop=wikitext

1 个回复
最合适的回答,由SO网友:marfarma 整理而成

要在帖子为空时预填充帖子,请钩住\\u editor\\u内容过滤器,这允许您检查帖子是否有任何内容。如果没有,那么您可以调用Wikipedia API并将其拉入-这将延迟后期编辑器加载,因此实现一个简单的缓存-根据您的用例,您可能需要创建一个持久缓存(通过创建一些数据库位置来存储数据-此缓存仅用于当前用户的会话)。

在函数中添加类似的内容。php文件。(我尚未对此进行测试。如果此代码不能立即运行,您将不得不测试和调试它。)


add_filter(\'the_editor_content\', \'preset_content\');

function my_editor_content( $content ) {
  global $post;

  // check if content is empty

  if ( $post->post_content == \'\' and $post->post_type == \'your_post_type\' ) {

    // pull post metadata to determine location

    $location = get_post_meta($post->ID,\'your_location_meta_field_name\',true);

    // results buffered in an array - only check wikipedia if not found

    if (!isset($wikipedia_content[$location]) || $wikipedia_content[$location] == \'\') {

      // return wikipedia API results here
      $wikipedia_content[$location] = your_wikipedia_api_call($location);

    }

    $default_content = $wikipedia_content[$location];

  } else {
    $default_content = $post->post_content;
  } 

  return $default_content;
}

结束