根据上一页的变量在 wordpress 上生成一个页面
Generating a page on wordpress based on variable from the previous page
几周来我一直在谷歌搜索和尝试不同的东西,现在我会直接问。
首先要注意的是,这一切都在 Wordpress 上,这似乎让一切变得更加困难。
我想做的是单击 link 将我定向到一个单独的页面。但是,link 将具有特定的 ID,具体取决于您单击的内容。因此,从技术上讲,所有 link 都会将您带到同一页面,但在加载页面时,它将使用 link 中的 ID 在页面上生成数据。
我的所有数据都是 JSON 基于各种端点的,我在 js 文件中生成页面数据并将其插入 div。
原始页面上的数据是在for循环中生成的,如:
for (var i = 0; i < data.length; i++) {
var trow = '<tr>';
trow += '<td><a href="?id=' + data[i].itemID + '">' + data[i].info1 + '</a></td>';
trow += '<td>' + data[i].info2 + '</td>';
trow += '<td>' + data[i].info3 + '</td>';
trow += '</tr>';
table += trow;
}
所以在新页面上,我会在没有 for 循环的情况下仅使用数据生成它[无论 ID 是什么]。
在两个看似的解决方案中,我都遇到了问题:
-除了 href url 之外,我不知道如何使用 javascript 通过页面发送变量,但不知道如何使用 javascript 的变量
-如果我能够用 PHP 发送它(我也不能),我不能将 PHP 变量变成 javascript 变量。
如果有任何不清楚的地方,请告诉我,我会尽快通知您。谢谢大家的帮助。
首先,您需要添加一个重写,以便您可以接收请求 - 您可以通过将以下内容添加到主题的 functions.php 文件中来完成此操作:
add_action( 'init', 'my_rewrites' );
function my_rewrites(){
add_rewrite_rule(
'^your-slug/([^/]*)/?',
'index.php?your-slug-data-id=$matches[1]',
'top'
);
}
然后,创建一个将利用此数据的新模板文件。您需要添加一个钩子,以便在您的重写运行时它会拉入正确的模板文件,如下所示:
add_action( 'pre_get_posts', 'show_your_new_page', 1 );
function show_your_new_page( $wp_query ) {
if ( ! is_admin() && $wp_query->is_main_query() && isset( $wp_query->query['your-slug-data-id'] ) ) {
include( TEMPLATEPATH . '-child/your-new-template.php' );
exit();
}
}
现在,在您的新模板文件 (your-new-template.php) 中,您可以使用 get_query_var( 'your-slug-data-id' )
获取您传递的 ID
设置好新页面后,只需将 table href 更改为:
<a href="/your-slug/' + data[i].itemID + '/">
您可以使用 PHP
发送和检索
http://myurlplace.com?id=123
Then retrieve it within say the header like:
$myVarId = $_GET['id'];
Then in your javascript
var myId = '<?=$myVarId?>';
我要强调这是一个简单的修复,它完全取决于您的需要,但这会起作用。
根据数据的来源,您可以做几件事。
此数据是来自数据库还是来自其他外部来源?
我在另一个问题中发现了这个。它能够完成我所需要的。对不起,如果我没有说清楚这行得通。没有太多的 wordpress 知识,我无法测试其他人给出的答案,但他们可能工作得很好,而且工作得更好。
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
}
var playerId = getUrlParameter('pid');
几周来我一直在谷歌搜索和尝试不同的东西,现在我会直接问。
首先要注意的是,这一切都在 Wordpress 上,这似乎让一切变得更加困难。
我想做的是单击 link 将我定向到一个单独的页面。但是,link 将具有特定的 ID,具体取决于您单击的内容。因此,从技术上讲,所有 link 都会将您带到同一页面,但在加载页面时,它将使用 link 中的 ID 在页面上生成数据。
我的所有数据都是 JSON 基于各种端点的,我在 js 文件中生成页面数据并将其插入 div。
原始页面上的数据是在for循环中生成的,如:
for (var i = 0; i < data.length; i++) {
var trow = '<tr>';
trow += '<td><a href="?id=' + data[i].itemID + '">' + data[i].info1 + '</a></td>';
trow += '<td>' + data[i].info2 + '</td>';
trow += '<td>' + data[i].info3 + '</td>';
trow += '</tr>';
table += trow;
}
所以在新页面上,我会在没有 for 循环的情况下仅使用数据生成它[无论 ID 是什么]。
在两个看似的解决方案中,我都遇到了问题:
-除了 href url 之外,我不知道如何使用 javascript 通过页面发送变量,但不知道如何使用 javascript 的变量
-如果我能够用 PHP 发送它(我也不能),我不能将 PHP 变量变成 javascript 变量。
如果有任何不清楚的地方,请告诉我,我会尽快通知您。谢谢大家的帮助。
首先,您需要添加一个重写,以便您可以接收请求 - 您可以通过将以下内容添加到主题的 functions.php 文件中来完成此操作:
add_action( 'init', 'my_rewrites' );
function my_rewrites(){
add_rewrite_rule(
'^your-slug/([^/]*)/?',
'index.php?your-slug-data-id=$matches[1]',
'top'
);
}
然后,创建一个将利用此数据的新模板文件。您需要添加一个钩子,以便在您的重写运行时它会拉入正确的模板文件,如下所示:
add_action( 'pre_get_posts', 'show_your_new_page', 1 );
function show_your_new_page( $wp_query ) {
if ( ! is_admin() && $wp_query->is_main_query() && isset( $wp_query->query['your-slug-data-id'] ) ) {
include( TEMPLATEPATH . '-child/your-new-template.php' );
exit();
}
}
现在,在您的新模板文件 (your-new-template.php) 中,您可以使用 get_query_var( 'your-slug-data-id' )
设置好新页面后,只需将 table href 更改为:
<a href="/your-slug/' + data[i].itemID + '/">
您可以使用 PHP
发送和检索http://myurlplace.com?id=123
Then retrieve it within say the header like:
$myVarId = $_GET['id'];
Then in your javascript
var myId = '<?=$myVarId?>';
我要强调这是一个简单的修复,它完全取决于您的需要,但这会起作用。
根据数据的来源,您可以做几件事。
此数据是来自数据库还是来自其他外部来源?
我在另一个问题中发现了这个。它能够完成我所需要的。对不起,如果我没有说清楚这行得通。没有太多的 wordpress 知识,我无法测试其他人给出的答案,但他们可能工作得很好,而且工作得更好。
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
}
var playerId = getUrlParameter('pid');