如何在wp / buddypress中显示用户上次访问过的页面?

时间:2011-08-12 04:01:47

标签: php javascript jquery wordpress buddypress

我试图弄清楚如何在我的网站中显示一个人访问过的最后3-5个页面。我做了一些搜索,我找不到这样做的WP插件,如果有人知道一个,请指向我那个方向:)如果没有,我将不得不从头开始写,那就是我在哪里我需要帮助。

我一直在努力了解数据库及其工作原理。我假设这是魔法将发生的地方,使用PHP,除非有一个使用cookie的javascript选项。

我对所有想法持开放态度:P&谢谢

2 个答案:

答案 0 :(得分:3)

如果我要编写这样的插件,我会使用会话cookie通过array_unshift()和array_pop()填充数组。这很简单:

$server_url = "http://mydomain.com";
$current_url = $server_url.$_SERVER['PHP_SELF'];
$history_max_url = 5; // change to the number of urls in the history array

//Assign _SESSION array to variable, create one if empty ::: Thanks to Sold Out Activist for the explanation!
$history = (array) $_SESSION['history'];

//Add current url as the latest visit
array_unshift($history, $current_url);
//If history array is full, remove oldest entry
if (count($history) > $history_max_url) {
    array_pop($history);
}
//update session variable
$_SESSION['history']=$history;

现在我已经对此进行了编码。可能存在语法错误或拼写错误。如果出现这样的错误,只需发出通知,我就会修改它。这个答案的目的主要是做出概念验证。你可以根据自己的喜好调整它。请注意,我假设session_start()已经在您的代码中。

希望它有所帮助。

===============

喂!对于迟到的回答感到抱歉,我出城了几天! :)

此插件将回答您对带LI标签的打印输出解决方案的请求

这就是我要做的事情:

print "<ol>";
foreach($_SESSION['history'] as $line) {
     print "<li>".$line.</li>";
}
print "</ol>"; 

这很简单。你应该在这里阅读foreach循环:http://www.php.net/manual/en/control-structures.foreach.php

对于session_start();,在使用任何$ _SESSION变量之前将其放入。

希望它有所帮助! :)

答案 1 :(得分:0)

由于原始问题带有wordpress标签,因此我将更新和翻译以上WordPress 5+的代码。请注意,您在任何地方都不需要session_start()

在这里,将下面的代码添加到singular.php模板(或single.php + page.php模板中,具体取决于您的需要):

/**
 * Store last visited ID (WordPress ID)
 */
function so7035465_store_last_id() {
    global $post;

    $postId = $post->ID; // or get the post ID from your template

    $historyMaxUrl = 3; // number of URLs in the history array
    $history = (array) $_SESSION['history'];

    array_unshift($history, $postId);

    if (count($history) > $historyMaxUrl) {
        array_pop($history);
    }

    $_SESSION['history'] = $history;
}

// Display latest viewed posts (or pages) wherever you want
echo '<ul>';
    foreach ($_SESSION['history'] as $lastViewedId) {
        echo '<li>' . get_permalink($lastViewedId) . '</li>';
    }
echo '</ul>';

您还可以通过将so7035465_store_last_id()函数放置在single-cpt.php模板中来存储最新查看的自定义帖子类型(CPT)。

您也可以将其添加到钩子中或将其作为操作插入到模板中,但这不在此问题的范围内。