我打算用以下方式隐藏链接网址。它将 url 存储在一个数组中,然后如果它检测到 $_GET 数组中的参数,它会重定向到保存的 url。
<?
/* Plugin Name: Sample Link Cloak */
add_action('admin_menu', 'sample_link_cloak');
function sample_link_cloak() {
add_options_page(
'Sample Link Cloak',
'Sample Link Cloak',
'manage_options',
'sample_link_cloak',
'sample_link_cloak_admin');
}
function sample_link_cloak_admin() {
?>
<div class="wrap">
<?php
$links = '<p><a href="http://www.google.com">google.com</a></p>' . PHP_EOL
. '<p><a href="http://www.wordpress.org">wordpress.org</a></p>' . PHP_EOL
. '<p><a href="http://www.stackoverflow.com">stackoverflow.com</a></p>' . PHP_EOL;
$doc = new DOMDocument();
@$doc->loadHTML($links);
$array_urls = array();
foreach ($doc->getElementsByTagName('a') as $node) {
$url = $node->getAttribute('href');
$hash = md5($url);
$array_urls[$hash] = $url;
$url = site_url('?urlcloak=' . $hash);
$node->setAttribute('href', $url);
}
echo $doc->saveXML();
update_option('sample_urlcloak', $array_urls);
?>
</div>
<?php
}
add_action('init', 'cloakurls');
function cloakurls() {
if (isset($_GET['urlcloak'])) {
$array_urls = get_option('sample_urlcloak');
wp_redirect($array_urls[$_GET['urlcloak']]);
exit;
}
}
我可以用这种方法预测一个问题。链接的数量每天都在增加,因此存储的数据在达到一定程度时必须删除。但是如果访问者将网页保存在本地驱动器上并稍后阅读内容并单击链接,此时如果服务器不存储url,则不会重定向。
我认为这与此处描述的问题几乎相同。寻找更有效的方式来提供大量链接重定向?但是对于分布式插件,编辑 .htaccess 文件是否现实/实用?我猜不是所有用户都有权修改.htaccess。我不知道。
我想知道是否有人可以指导我正确的方向。