banner
Feng

Feng's xLog

我在xLog上的窝

Wordpressに中間ページのリダイレクトを追加する

多くの人のブログでこのような「神秘的な」機能があるのを見かけますが、私は登録済みのウェブサイトとして、それは確かに必要だと思います。注意が必要ですからね。ただし、それがデプロイされている場所や関係ない場合、個人的にはあるかないかはそれほど重要ではないと感じます。どこにリダイレクトされるかは私には関係ありません。ただし、他の人が持っているのに自分が持っていないと、何かが足りないように感じませんか(この心理は本当によくないですが、自分自身をいじめる理由を与えてくれました)。

私は経験豊富な初心者として、自分でコードを書くことは絶対に不可能ですが、今は ChatGpt があるので、これは私に何度も助けてくれました。ここで OpenAI 社に非常に正式に感謝したいと思います。あなたたちは本当にすごいです!それでは、余計な話はせずに始めましょう。すべてのリンク(記事、コメント)を中間ページ(ここでは go.php)に強制的にリダイレクトするには、テーマの functions.php に適切なコードを追加するだけです:

/*リンクのリダイレクト*/
function redirect_external_links($content) {
    $home_url = home_url(); // WordPressサイトのメインURLを取得
    // 正規表現を使用してすべてのリンクをマッチさせる
    return preg_replace_callback('#<a\s+[^>]*href=["\'](.*?)["\'][^>]*>#is', function($matches) use ($home_url) {
        $url = $matches[1]; // URLを抽出
        // 外部リンクかどうかをチェック
        if (strpos($url, $home_url) === false && filter_var($url, FILTER_VALIDATE_URL)) {
            // URLを変更し、go.phpを介してリダイレクトする
            $new_url = '/go.php?url=' . urlencode($url);
            return str_replace($matches[1], $new_url, $matches[0]);
        } else {
            // 内部リンクは変更しない
            return $matches[0];
        }
    }, $content);
}
// フィルターを追加して、記事のコンテンツ内のリンクを処理する
add_filter('the_content', 'redirect_external_links');
// コメント内のリンクを処理する
add_filter('comment_text', 'redirect_external_links');
// コメントの投稿者リンクを処理する
function filter_comment_author_link($author_link) {
    $home_url = get_option('home');
    return redirect_external_links($author_link);
}
add_filter('get_comment_author_link', 'filter_comment_author_link');

そして、Wordpress のルートディレクトリに go.php ファイルを作成し、以下のコードを参考にしてください:

<?php
// WordPressの環境とテンプレートをロードする
require_once('wp-load.php');
// セキュリティチェック、渡されたURLが有効であることを確認し、リダイレクト攻撃を防ぐ
$raw_url = isset($_GET['url']) ? $_GET['url'] : 'http://057000.xyz';
$url = filter_var($raw_url, FILTER_VALIDATE_URL) ? $raw_url : 'http://057000.xyz';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ページリダイレクト--Feng's Blog</title>
<style>
    body {
        padding: 0;
        margin: 0;
        font-family: Arial, sans-serif;
        background: #f1f1f1;
        text-align: left;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        height: 100vh;
    }
    .container {
    background: #fff;
    padding: 20px;
    border-radius: 5px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    }
    .url, .countdown {
        margin: 10px 0;
    }
    a.button {
    background: #3498db;
    color: white;
    padding: 10px 20px;
    text-decoration: none;
    border-radius: 5px;
    transition: background-color 0.3s;
    }
    a.button:hover {
    background: #2980b9;
   }
</style>
<script>
    var countdown = 10; // カウントダウン(秒)
    var url = '';
    function redirectToUrl() {
        window.location.href = url;
    }
    function updateCountdown() {
        var countdownElement = document.getElementById('countdown');
        countdownElement.innerHTML = `あと ${countdown} 秒で自動的に開きます...`;
        if(countdown === 0) {
            redirectToUrl();
        } else {
            countdown--;
            setTimeout(updateCountdown, 2000);
        }
    }
    window.onload = function() {
        const params = new URLSearchParams(window.location.search);
        url = params.get('url') || 'http://057000.xyz'; // デフォルトのURL(指定されていない場合)
        var urlElement = document.getElementById('url');
        urlElement.innerHTML = `<strong>訪問先:</strong> ${url}`;
        setTimeout(updateCountdown, 2000); // カウントダウンを開始
    };
</script>
</head>
<body>
<div class="container">
    <h1>Feng's Blogを離れます...</h1>
    <p class="url" id="url"></p>
    <p>ページにリダイレクトされますので、アカウントと財産の安全に注意してください。</p>
    <p class="countdown" id="countdown"></p>
     <a href="#" onclick="redirectToUrl();" class="button">続ける</a>
</div>
</body>
</html>

上記のコードの 057000.xyz を自分のブログのアドレスに変更することを忘れないでください。大まかな効果図は以下の通りです:
image
さて、自分自身のリダイレクトページができましたね。笑

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。