根据访问的 URL 个性化 Wordpress 会话
Personalising Wordpress Sessions Based on the Visited URLs
第一次在这里提问。我正在构建一个网页,如果用户访问了某些页面,我想更改页面上的文本。
我最初的想法是在会话中创建一个数组,记录每个 url 访问时使用 $_SERVER['REQUEST_URI']
之类的东西,如果它是我从头开始构建的网站,这可能会起作用.但是...因为该站点是在 Wordpress 中构建的,所以我不是 100% 了解如何在该系统中执行此操作。
下面是我建议您执行的操作。导航到您的主题并打开文件 functions.php
然后在文件的任意位置找到合适的位置(文件的底部不会那么奇怪)。
然后,添加以下函数:
<?php
// FILE-NAME: functions.php <== LOCATED AT THE ___/wp-content/themes/your-theme-name
add_action("init", "initiatePageLogging");
function initiatePageLogging(){
// START THE SESSION IF IT HAS NOT BEEN STARTED
// THIS WOULD BE USED TO SHARE DATA ACROSS YOUR PAGES...
if (session_status() == PHP_SESSION_NONE || session_id() == '') {
session_start();
}
// CHECK THAT THE SESSION VARIABLE FOR OUR PAGE-LOGGING IS THERE
// IF NOT CREATE IT
if(!isset($_SESSION['visitedPages'])){
// IT DOES NOT EXIST SO WE CREATE IT & INITIALIZE IT AS AN EMPTY ARRAY
$_SESSION['visitedPages'] = array();
}
// NO NEED TO KEEP THE SESSION ARRAY $_SESSION['visitedPages'] TOO LONG
// SO WE TRIM IT OUT CONDITIONALLY TO KEEP IT UNDER CHECK
if(count($_SESSION['visitedPages']) >= 10){
// WE REMOVE ABOUT 7 ELEMENTS FROM THE BEGINNING OF THE ARRAY
// LEAVING JUST THE LAST 3 - NOW THAT'S COOL...
$arrVisitedPages = $_SESSION['visitedPages'];
array_splice($arrVisitedPages, 0, 7);
// RE-DEFINE THE $_SESSION['visitedPages'] ARRAY
$_SESSION['visitedPages'] = $arrVisitedPages;
}
}
function getLastVisitedPage(){
$lastVisitedPage = get_site_url() . $_SERVER['REQUEST_URI']; //<== FALL BACK TO THE CURRENT PAGE IF WE HAVE AN ISSUE.
if( isset($_SESSION['visitedPages']) && is_array($_SESSION['visitedPages']) ){
$arrVP = $_SESSION['visitedPages'];
$intArrVPLength = count($arrVP);
$diff = ($intArrVPLength - 2);
$lastVisitedPage = ( $intArrVPLength > 1) ? $arrVP[$diff] : $lastVisitedPage;
}
return $lastVisitedPage;
}
?>
现在,第 1 部分完成了!在您的主题中,您仍然会找到一个名为 header.php 的文件
这是我们必须进行日志记录的地方,因为默认情况下 Word-Press 中的每个页面都会加载此页面(除非另有配置)。
在该文件的最顶部 - 我的意思是在第 1 行,执行此操作:
<?php
// FILE-NAME: header.php <== LOCATED AT THE ___/wp-content/themes/your-theme-name
// BUILD THE URL OF THE CURRENT PAGE & PUSH IT TO THE SESSION VARIABLE...
$thisPage = get_site_url() . $_SERVER['REQUEST_URI'];
$_SESSION['visitedPages'][] = $thisPage;
// THAT'S ALL! BELOW HERE, THE ORIGINAL CONTENT OF THE header.php FILE CONTINUES...
?>
还有一件事!我们现在如何使用 $_SESSION['visitedPages'] 变量?
否则,我们如何使用 $_SESSION['visitedPages'] 变量知道最后访问了哪个页面?
现在在每个文件上,例如 (page.php、index.php、category.php、taxonomy.php 等);您现在可以通过执行以下操作找出上次访问的页面:
<?php
// FILE-NAME: ANY FILE IN THE THEME LIKE: page.php, index.php, category.php, taxonomy.php, etc
$lastVisitedPage = getLastVisitedPage();
// THAT'S IT, PAL...
?>
希望对您有所帮助....
第一次在这里提问。我正在构建一个网页,如果用户访问了某些页面,我想更改页面上的文本。
我最初的想法是在会话中创建一个数组,记录每个 url 访问时使用 $_SERVER['REQUEST_URI']
之类的东西,如果它是我从头开始构建的网站,这可能会起作用.但是...因为该站点是在 Wordpress 中构建的,所以我不是 100% 了解如何在该系统中执行此操作。
下面是我建议您执行的操作。导航到您的主题并打开文件 functions.php 然后在文件的任意位置找到合适的位置(文件的底部不会那么奇怪)。 然后,添加以下函数:
<?php
// FILE-NAME: functions.php <== LOCATED AT THE ___/wp-content/themes/your-theme-name
add_action("init", "initiatePageLogging");
function initiatePageLogging(){
// START THE SESSION IF IT HAS NOT BEEN STARTED
// THIS WOULD BE USED TO SHARE DATA ACROSS YOUR PAGES...
if (session_status() == PHP_SESSION_NONE || session_id() == '') {
session_start();
}
// CHECK THAT THE SESSION VARIABLE FOR OUR PAGE-LOGGING IS THERE
// IF NOT CREATE IT
if(!isset($_SESSION['visitedPages'])){
// IT DOES NOT EXIST SO WE CREATE IT & INITIALIZE IT AS AN EMPTY ARRAY
$_SESSION['visitedPages'] = array();
}
// NO NEED TO KEEP THE SESSION ARRAY $_SESSION['visitedPages'] TOO LONG
// SO WE TRIM IT OUT CONDITIONALLY TO KEEP IT UNDER CHECK
if(count($_SESSION['visitedPages']) >= 10){
// WE REMOVE ABOUT 7 ELEMENTS FROM THE BEGINNING OF THE ARRAY
// LEAVING JUST THE LAST 3 - NOW THAT'S COOL...
$arrVisitedPages = $_SESSION['visitedPages'];
array_splice($arrVisitedPages, 0, 7);
// RE-DEFINE THE $_SESSION['visitedPages'] ARRAY
$_SESSION['visitedPages'] = $arrVisitedPages;
}
}
function getLastVisitedPage(){
$lastVisitedPage = get_site_url() . $_SERVER['REQUEST_URI']; //<== FALL BACK TO THE CURRENT PAGE IF WE HAVE AN ISSUE.
if( isset($_SESSION['visitedPages']) && is_array($_SESSION['visitedPages']) ){
$arrVP = $_SESSION['visitedPages'];
$intArrVPLength = count($arrVP);
$diff = ($intArrVPLength - 2);
$lastVisitedPage = ( $intArrVPLength > 1) ? $arrVP[$diff] : $lastVisitedPage;
}
return $lastVisitedPage;
}
?>
现在,第 1 部分完成了!在您的主题中,您仍然会找到一个名为 header.php 的文件 这是我们必须进行日志记录的地方,因为默认情况下 Word-Press 中的每个页面都会加载此页面(除非另有配置)。 在该文件的最顶部 - 我的意思是在第 1 行,执行此操作:
<?php
// FILE-NAME: header.php <== LOCATED AT THE ___/wp-content/themes/your-theme-name
// BUILD THE URL OF THE CURRENT PAGE & PUSH IT TO THE SESSION VARIABLE...
$thisPage = get_site_url() . $_SERVER['REQUEST_URI'];
$_SESSION['visitedPages'][] = $thisPage;
// THAT'S ALL! BELOW HERE, THE ORIGINAL CONTENT OF THE header.php FILE CONTINUES...
?>
还有一件事!我们现在如何使用 $_SESSION['visitedPages'] 变量? 否则,我们如何使用 $_SESSION['visitedPages'] 变量知道最后访问了哪个页面?
现在在每个文件上,例如 (page.php、index.php、category.php、taxonomy.php 等);您现在可以通过执行以下操作找出上次访问的页面:
<?php
// FILE-NAME: ANY FILE IN THE THEME LIKE: page.php, index.php, category.php, taxonomy.php, etc
$lastVisitedPage = getLastVisitedPage();
// THAT'S IT, PAL...
?>
希望对您有所帮助....