WordPress显示本地外部内容的方式是什么?

时间:2021-04-22 作者:chris_blues

我的处境有些棘手。公司的内部服务器运行一些未知软件(意味着我没有任何访问权限),通过自定义API将数据导出到http服务器。这些数据存储在与Wordpress相同的MySQL环境中。只是一个不同的DB。这意味着DB1有WP数据,DB2保存导入的公司数据。

现在我需要在WP中显示导入的数据。在一种概览中显示所有数据没有问题。我只有一个WP页面,在它的模板中编译来自DB的所有数据,并显示所有对象的列表。

https://example.com/objects/all-objects

但我该怎么做,展示one 数据对象?我无法为每个数据对象创建WP页。这些变化太快,跟不上,不断的添加和删除可能会把WP搞糊涂。

如果我创建了一个空白页;“详细信息”;,需要显示哪个对象的ID,这可能会起作用:

https://example.com/objects/details/[object-ID]

然后我可以,在页面的模板中;“详细信息”;,从URL读取对象ID并显示请求的数据。

<小时/>

Question is:

如何确保加载正确的模板、不显示404等不会导致问题?WP中是否有一些功能可以确保;“详细信息”;无论URL slug后面是什么,都会加载?

What is the Wordpress way, of accomplishing this?

我一直把头撞在墙上,我想我只是错过了要寻找的正确关键词。。。

感谢所有提示和帮助!!!

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

我不完全清楚你到底在找什么。但据我估计,这可能会帮助你朝着正确的方向前进。

我认为您需要的是一个URL重写,这样您就可以有一个URL端点来显示您的数据。如果使用正确的条件逻辑,则可以避免404并显示错误消息。

首先,您需要告诉WP[对象ID]是一个查询参数。例如,我们将调用该变量$my_object_id (我会确保在“object\\u id”之前有一些前缀,以避免与其他不太详细的变量名发生潜在的名称冲突)。

添加您的;对象ID“;作为可以在URL中使用的自定义查询变量,请使用query_vars 过滤器:

function my_object_id_query_var( $vars ) {
    $vars[] = \'my_object_id\';
    return $vars;
}
add_filter( \'query_vars\', \'my_object_id_query_var\' );
现在你可以用get_query_var():

$object_id = get_query_var( \'my_object_id\' );
所以现在您希望能够在URL中使用它。使用add_rewrite_rule() 要将这些添加到可能的permalink结构中,请执行以下操作:

function my_object_id_rewrite_tag_rule() {
    add_rewrite_rule( \'^my_object_id/([^/]*)/?\', \'index.php?my_object_id=$matches[1]\',\'top\' );
}
add_action( \'init\', \'my_object_id_rewrite_tag_rule\' );
请注意,您可能需要刷新永久链接设置-只需重新保存现有设置即可。

然后,如果对象ID值为;some\\u id“;,您应该可以从如下url获取:

https://example.com/objects/details/my_object_id/{actual_object_id}/

请注意,这个答案可能需要您进行一些额外的修补-它不会直接从盒子里飞出来。但我认为添加重写规则是你的方向。希望这有帮助。

Update:

根据评论,我认为以下内容可能更接近您需要使用的内容:

// Adding the id var so that WP recognizes it 
function SH_insert_query_vars( $vars ) {
  array_push( $vars, \'SH_objekt_id\' );
  return $vars;
}
add_filter( \'query_vars\', \'SH_insert_query_vars\' );

// define rewrite rule 
function SH_objekt_id_rewrite_tag_rule() {
  add_rewrite_rule( \'^SH_objekt_id/([^/]*)/?\', \'index.php?page_id=860&SH_objekt_id=$matches[1]\', \'top\' );
}
add_action( \'init\', \'SH_objekt_id_rewrite_tag_rule\' );
那么URL将是:

https://example.com/objects/details/SH_objekt_id/{actual_object_id_value}/

(请注意URL中如何使用查询变量)

现在,在模板中,以下内容应选择对象ID值:

$object_id = get_query_var( \'SH_objekt_id\' );

Update #2 (what ended up working for the OP after working out the details):

用户需要更改特定URL的某些详细信息。为了便于阅读代码,注释中注明了这些内容,并在此处进行了总结。

// Adding the id var so that WP recognizes it 

function SH_insert_query_vars( $vars ) {
  array_push( $vars, \'objekt_id\' );
  return $vars;
}
add_filter( \'query_vars\', \'SH_insert_query_vars\' );

// define rewrite rule 

function SH_objekt_id_rewrite_tag_rule() {
  add_rewrite_rule( \'^vermietung/wohnobjekte/details-wohnobjekt/([^/]*)/?\', \'index.php?page_id=860&objekt_id=$matches[1]\', \'top\' );
}
add_action( \'init\', \'SH_objekt_id_rewrite_tag_rule\' );
请注意,现在需要检索查询变量get_query_var( \'objekt_id\' )

相关推荐

Redirecting from login

我希望我的站点在登录到site\\u url(“/”)后,为除“administrator”之外的所有用户重定向。我还希望admin\\u栏显示特定角色ie event\\u planner。除了当和event\\u planner登录并单击管理栏进入管理时,它会重定向到“/”之外,其他功能都正常工作。用于重定向的挂钩是“admin\\u init”,这显然是错误的。是否有另一个钩子可以用来在登录时重定向到/而不是在按下管理栏上的仪表板时重定向。谢谢