【问题标题】:Personalising Wordpress Sessions Based on the Visited URLs根据访问的 URL 个性化 Wordpress 会话
【发布时间】:2016-05-17 08:40:47
【问题描述】:

第一次在这里提问。我正在构建一个网页,如果用户访问了某些页面,我想更改页面上的文本。

我最初的想法是在会话中创建一个数组,将每个 url 记录为它访问过的类似 $_SERVER['REQUEST_URI'] 的东西,如果它是我从头开始构建的网站,这可能会起作用。但是...因为该网站是在 Wordpress 中构建的,所以我不是 100% 如何在该系统中执行此操作。

【问题讨论】:

  • 不是一个真正适合 SO 的问题,因为它主要是基于您如何处理这个问题的意见,也是一个非常广泛的问题。
  • @Epodax,这是如何基于意见的?他只是在问应该如何在 wordpress 中实现它。
  • @SZenC 因为很可能有多种方法可以做 OP 想要的事情,这将归结为每个人喜欢如何做某些事情。但即使我们忽略了这一点,它仍然是一个广泛的 / 问我们“如何”的问题,这对于 SO 来说是题外话。

标签: php wordpress session personalization


【解决方案1】:

现在我建议你这样做。导航到您的主题并打开文件 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...
    ?>

我希望这会有所帮助....

【讨论】:

  • 干杯这正是我需要的那种东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2011-11-10
  • 2017-12-07
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多