サポート » 使い方全般 » AJAXの実行中にページURLを取得する方法

  • 解決済 notenotennoote

    (@notenotennoote)


    AJAXの実行中にページURLを取得する方法を伺いたいのですが、下記ではできないのはなぜでしょうか?

    add_action( 'wp_ajax_get_data', 'get_data' );
    function get_data() {
    	$url = $_SERVER['REQUEST_URI']; // ページのURLではないのが取得される
    	echo '現在のページは' . $url . 'です';
    }

    そして対策としては下記のようにJSからURLを送るしかないでしょうか?

    add_action( 'wp_ajax_get_data', 'get_data' );
    function get_data() {
    	$url = esc_html( $_POST['url'] ); // JSから受け取ったものを使う
    	echo '現在のページは' . $url . 'です';
    }

    もしget_dataの中で普通にURLを取得する方法があればお伺いしたいと思います。
    宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    そして対策としては下記のようにJSからURLを送るしかないでしょうか?

    そうなると思います。
    リファラ($_SERVER[“HTTP_REFERER”])で取得できる場合もありますが、リファラは信頼すべき値ではありません。セキュリティーソフトなどによって無効にされたり、偽装されることもあります。

    トピック投稿者 notenotennoote

    (@notenotennoote)

    ありがとうございます。勉強になりました。

    これひょっとしたらis_page()is_singular()なども判定ききませんよね?

    そうしましたら、たとえばis_singular()なら

    
    $url = esc_html( $_POST['url'] );
    $page = explode('/',$url)[3];
    if( $page=='customposttype1' ){
    }
    elseif( $page=='customposttype2' ){
    }

    のような方法でしょうか?

    url_to_postid 関数を使用するのはどうでしょうか?この関数は URL を引数に投稿 ID を取得することができます。

    例:

    $post_id = url_to_postid( $url );
    $post_type = get_post_type( $post_id );
    if( $post_type == 'customposttype1' ) {
    } elseif( $post_type == 'customposttype2' ) {
    }
    トピック投稿者 notenotennoote

    (@notenotennoote)

    ありがとうございます。そう致します。

    それにしてもそちら便利ですね。今までURLからのID取得はget_page_by_path()を使っていて、でもこれは引数に投稿タイプ名が必要だから困る…というシーンが結構多かったのですけど、url_to_postid()なら投稿タイプ名が不要ですね。(投稿タイプを指定しない分、取得に時間がかかるのでしょうか?)

    良いことを知りました。ありがとうございます。:)

    • この返信は4年、 5ヶ月前にnotenotennooteが編集しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「AJAXの実行中にページURLを取得する方法」には新たに返信することはできません。