将动态节添加到WordPress

时间:2015-11-08 作者:Andrew

[编辑:我在下面添加了一个更具体的示例]

我需要将一个自定义PHP站点转换为WordPress。该站点有60000多个媒体项以及大量元数据,所有这些都需要转移到新站点。媒体数据通过本地API访问,我已经知道如何在WordPress中访问API,所以这不是问题。

我搞不懂的是如何编写插件,以便

URL参数决定要显示的内容(理想情况下通过mod_rewrite);以及在WordPress中如何以及在何处公开插件/albums/12345 或/authors/23456 是否解析为只显示正确内容的页面?

如果您能告诉我在文档中的什么地方可以查看,我真的很乐意使用一个简单的RTFM。自从我上次使用WP以来,已经有10年的时间了,所以现在一切对我来说都是全新的。我甚至不知道该去哪里找。

<小时>Edit这里有一个更具体的例子:

比如说,我想发布一个来自RSS的不断更新的播客提要,或者一个来自推特API的推特列表,或者类似的东西。基本上,源代码是通过定义良好的API访问的(我可以轻松地处理加载、解析和格式化这些内容的逻辑);数据都在那里,随时可以读取。

我需要做什么才能让这些内容显示出来以响应特定的URL请求?

例如,如果有人去/podcasts/pages/1, 如何使页面内容显示播客标题的第一页。如果他们去/podcasts/items/oct-31-2015-wordpress, 如何显示播客元数据?

我是否使用动作或筛选器?我需要使用什么挂钩?我是否使用自定义帖子类型?

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

有几种方法可以做到这一点。如果您在这里查找有关“虚拟页面”的问题,您可能会找到一些适合您的选项。

一种快速实现此功能的方法-

1) 在WordPress admin的Pages下创建一个页面。这将是加载到主查询中的页面,并将用作稍后添加的重写规则的目标。页面的内容并不重要,如果不想输出,不需要输出,只是为了WordPress可以成功运行主查询。

(2)Add whatever query vars 您需要从URL中提取数据。例如album_id, podcast_id, 等确保它们足够独特,不会与WordPress自己的查询变量冲突。There\'s a likely not complete list of those vars on the register taxonomy codex page. 示例:

function wpd_my_query_vars( $qvars ) {
    $qvars[] = \'album_id\';
    $qvars[] = \'podcast_id\';
    return $qvars;
}
add_filter( \'query_vars\', \'wpd_my_query_vars\' , 10, 1 );
3)为要服务的各种请求添加所需的重写规则。您的规则将针对您在步骤1中创建的页面,并设置您在步骤2中添加的查询变量。示例:

function wpd_rewrite_rules(){
    add_rewrite_rule(
        \'^albums/([^/]*)/?\',
        \'index.php?page_id=42&album_id=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_rewrite_rules\', 10, 0 );
请注意,重写规则需要flushed 每当添加新规则时。您也可以通过访问admin中的Settings>Permalinks页面来完成此操作。

4) 最后一步是可选的。您可以使用单个页面模板处理所有这些类型的请求。如果要将各种请求分离到它们自己的模板中,请将筛选器添加到page_template 为每个加载一个不同的。请注意,WordPress将所有这些请求都视为您的目标页面,否则无法单独检测您使用自己的规则和查询变量创建的任何其他差异。示例:

function wpd_page_template( $template = \'\' ) {
    global $wp_query;
    if( ! array_key_exists( \'album_id\', $wp_query->query_vars ) ) return $template;

    $template = locate_template( \'album-template.php\' );
    return $template;
}
add_filter( \'page_template\', \'wpd_page_template\' );
您可以对此进行扩展,以检查是否存在为加载其他模板而添加的各种查询变量。您可以直接从访问自定义查询变量$wp_query 如上所述,或者如果你在道德上反对全球化get_query_var. 您还可以通过is_page conditional tag.

在这种方法中,可能还有一些其他方面需要清理。例如,您可能希望删除rel_canonicalwp_head 操作,并添加您自己的函数以输出此内容的规范元标记。

相关推荐

更新页面(update-core.php)和插件页面(plugins.php)恢复到主页

我在Wordpress网站的管理视图中收到通知,我有一个网站和插件的可用更新(在我的网络管理仪表板中,在“插件”和“更新”旁边的红色圆圈中有“1”)。。。但当我尝试同时转到“更新”页和;插件页面,是否显示主页?此时的URL为http:///wp-admin/network/update-core.php/和http:///wp-admin/plugins.php/分别地因此,我永远无法到达真正的更新页面,也无法更新我的Wordpress或插件。如何显示更新或插件页面?