サポート » 使い方全般 » ルートを相対座標にする方法

  • 解決済 chatm

    (@chatm)


    WordPress内のリンクを絶対パスから相対パスにする方法で、以下のコードをfunction.phpに設定し、php5.6のwordpress4.9.7で表示がうまくいっていたのですが、php7.1に変更してからワーニングが出てしまいます。コードが非推奨なのでしょうか?どなたか分かる方がいらっしゃいましたら教えて頂けると助かります。

    //相対パスにする・「http(s)」と「ドメイン」を取り除く
    class relative_URI {
        function relative_URI() {
            add_action('get_header', array(&$this, 'get_header'), 1);
            add_action('wp_footer', array(&$this, 'wp_footer'), 99999);
        }
        function replace_relative_URI($content) {
            $home_url = trailingslashit(get_home_url('/'));
            $parsed   = parse_url($home_url);
            $replace  = $parsed['scheme'] . '://' . $parsed['host'];
            $pattern  = array(
                '# (href|src|action)="'.preg_quote($replace).'([^"]*)"#ism',
                "# (href|src|action)='".preg_quote($replace)."([^']*)'#ism",
            );
            $content  = preg_replace($pattern, ' $1="$2"', $content);
            $pattern  = '#<(meta [^>]*property=[\'"]og:[^\'"]*[\'"] [^>]*content=|link [^>]*rel=[\'"]canonical[\'"] [^>]*href=|link [^>]*rel=[\'"]shortlink[\'"] [^>]*href=|data-href=|data-url=)[\'"](/[^\'"]*)[\'"]([^>]*)>#uism';
            $content = preg_replace($pattern, '<$1"'.$replace.'$2"$3>', $content);
    
            return $content;
        }
        function get_header(){
            ob_start(array(&$this, 'replace_relative_URI'));
        }
        function wp_footer(){
            ob_end_flush();
        }
    }
    new relative_URI();
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    出ているワーニングのメッセージを書いて頂けないでしょうか。

    こんにちは

    下記ページが参考になると思います。
    https://www.riscascape.net/archives/15755

    munyagu様、ishitaka様ありがとうございます!
    ishitaka様に教えて頂いた参考サイトで解決しました!
    PHP 7.0.x 以降ではclass名とfunctions名が一致しているのがダメなんですね。
    function __construct() を使って修正したらちゃんと稼動しました。
    ありがとうございます!修正コードを下記に記載します。

    class relative_URI {
        function __construct(){
            add_action('get_header', array(&$this, 'get_header'), 1);
            add_action('wp_footer', array(&$this, 'wp_footer'), 99999);
        }
        function replace_relative_URI($content) {
            $home_url = trailingslashit(get_home_url('/'));
            $parsed   = parse_url($home_url);
            $replace  = $parsed['scheme'] . '://' . $parsed['host'];
            $pattern  = array(
                '# (href|src|action)="'.preg_quote($replace).'([^"]*)"#ism',
                "# (href|src|action)='".preg_quote($replace)."([^']*)'#ism",
            );
            $content  = preg_replace($pattern, ' $1="$2"', $content);
            $pattern  = '#<(meta [^>]*property=[\'"]og:[^\'"]*[\'"] [^>]*content=|link [^>]*rel=[\'"]canonical[\'"] [^>]*href=|link [^>]*rel=[\'"]shortlink[\'"] [^>]*href=|data-href=|data-url=)[\'"](/[^\'"]*)[\'"]([^>]*)>#uism';
            $content = preg_replace($pattern, '<$1"'.$replace.'$2"$3>', $content);
    
            return $content;
        }
        function get_header(){
            ob_start(array(&$this, 'replace_relative_URI'));
        }
        function wp_footer(){
            ob_end_flush();
        }
    }
    $relative_URI = new relative_URI();
    add_filter( 'stylesheet_directory_uri', 'wp_make_link_relative' );
    add_filter( 'template_directory_uri', 'wp_make_link_relative' );
    add_filter( 'style_loader_src', 'wp_make_link_relative' );
    add_filter( 'script_loader_src', 'wp_make_link_relative' );
    add_filter( 'theme_file_uri', 'wp_make_link_relative' );

    みたいな解決方法もあります。

    Toro_Unit様ありがとうございます!
    教えて頂いたコードでも同じく稼動しました。記事のパーマリンクだけ「hhttp」がついたので、前述の方法で運用してみます。ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「ルートを相対座標にする方法」には新たに返信することはできません。