PHP:获取页面标题或WordPress用户昵称


PHP: Grab page title or WordPress user nickname

我将首先解释我希望代码做什么。

代码应通过使用 API 显示游戏中玩家的数据由游戏本身提供(http://services.runescape.com/m=hiscore/index_lite.ws?player=NameOfPlayer(。在我的网站上,每个播放器都有自己的页面,页面的标题是玩家的名称。因此,我想抓住页面的标题,以便在它下面显示玩家的数据。

(代码的另一部分完全正常工作。如果我删除$title行并将$url更改为播放器的行,则可以工作(。

我在使用以下代码时遇到问题。当我将此代码插入页面时,页面会中断。但是,如果我删除$title = alert(document.title);');行,页面不会中断。

在网上和stackoverflow上做了一些研究,我试图在str_get_html('<title></title>');中改变这条线,但没有帮助。

<?php
$title = str_get_html('<title></title>');
$url = "http://services.runescape.com/m=hiscore/index_lite.ws?player=$title";
$f = file_get_contents($url);
$items = explode(' ', $f);
foreach($items as $item){
    $player = explode(",", $item);
    echo "Total Level: $player[1]<br />";
    echo "Attack: $player[3]<br />";
    echo "Defence: $player[5]<br />";
    echo "Strength: $player[7]<br />";
    echo "Constitution: $player[9]<br />";
    echo "Ranged: $player[11]<br />";
    echo "Prayer: $player[13]<br />";
    echo "Magic: $player[15]<br />";
    echo "Cooking: $player[17]<br />";
    echo "Woodcutting: $player[19]<br />";
    echo "Fletching: $player[21]<br />";
    echo "Fishing: $player[23]<br />";
    echo "Firemaking: $player[25]<br />";
    echo "Crafting: $player[27]<br />";
    echo "Smithing: $player[29]<br />";
    echo "Mining: $player[31]<br />";
    echo "Herblore: $player[33]<br />";
    echo "Agility: $player[35]<br />";
    echo "Thieving: $player[37]<br />";
    echo "Slayer: $player[39]<br />";
    echo "Farming: $player[41]<br />";
    echo "Runecrafting: $player[43]<br />";
    echo "Hunter: $player[45]<br />";
    echo "Construction: $player[47]<br />";
    echo "Summoning: $player[49]<br />";
    echo "Dungeoneering: $player[51]<br />";
    echo "Divination: $player[53]<br />";
    echo "Invention: $player[55]<br />";
}
?>

我也在想可以用另一种方式获取数据,但我不知道该怎么做。该网站在WordPress上运行,每个播放器页面都连接到注册用户的WordPress帐户。可以使用以下引用来获取用户的数据:

get_userdata( $userid );

每个用户的玩家名称都存储为"昵称"。因此,可以使用以下命令获取每个用户的玩家名称:

<?php $user_info = get_userdata(1);
  echo $user_info->nickname;
?>

但是,用户页面是由插件生成的。我试图调整其中的代码,但我无法成功做到这一点。

你知道我如何在不破坏页面的情况下抓取页面标题,或者抓住用户的昵称吗?

我现在已将页面设置为如下所示:example.com/user/playername(仅玩家名称更改(。我现在使用: global $post; $pagename = $post->post_name;但是,$pagename显示为user而不是playername。你知道我怎样才能让它"得到"playername而不是它的蛞蝓吗?

编辑2:

function getPath($url)
{
$path = parse_url($url,PHP_URL_PATH);
$lastSlash = strrpos($path,"/");
return substr($path,1,$lastSlash-1);
}

您可以尝试使用此函数解析$url返回的 HTML

<?php
    function page_title($url) {
        $fp = file_get_contents($url);
        if (!$fp) 
            return null;
        $res = preg_match("/<title>(.*)<'/title>/siU", $fp, $title_matches);
        if (!$res) 
            return null; 
        // Clean up title: remove EOL's and excessive whitespace.
        $title = preg_replace('/'s+/', ' ', $title_matches[1]);
        $title = trim($title);
        return $title;
    }
?>

您可以在此答案中找到更多详细信息。

编辑

由于您希望从自己的URL中查找玩家名称,因此可以使用get_permalink((。

然后,您需要从类似 https://example.com/user/eibe/ 的 URL 中提取玩家名称。

为此,您可以使用以下代码:

<?php
$permalink = get_permalink();  // $permalink is now 'https://example.com/user/eibe/'
$permalink = trim($permalink, "/"); // $permalink is now 'https://example.com/user/eibe'
$player_name = substr($permalink, strrpos($permalink, '/') + 1); // $player_name is now 'eibe'
?>

希望这有帮助。