web-dev-qa-db-ja.com

/ page / {pagenum} /なしで現在のURL(パーマリンク)を取得します

現在のURL(ホームページ、アーカイブ、投稿タイプアーカイブ、カテゴリアーカイブなど)を取得する方法はありますが、常にwithout/page/{pagenum}/部分が存在する場合はどうすればよいですか?したがって、実際のURLが次の場合:

example.com/category/uncategorized/

OR

example.com/category/uncategorized/page/2/

戻り値は常に

example.com/category/uncategorized/

8
Ihor Vorotnov

現在のURLはhome_url( $wp->request )を通じて取得できます。

以下の例を試してください。

global $wp;

// get current url with query string.
$current_url =  home_url( $wp->request ); 

// get the position where '/page.. ' text start.
$pos = strpos($current_url , '/page');

// remove string from the specific postion
$finalurl = substr($current_url,0,$pos);


echo $finalurl;
9
Govind Kumar

Govind Kumar による回答 - はうまくいったが、/ page/{pagenum} /がURLに含まれている場合にのみURLを返し、そうでなければ何も返さなかった。改ページなしで常にベースURLを返すユニバーサルソリューションが必要だったので、Govindのコードを少し修正して関数にラップしました。

function get_nopaging_url() {

    global $wp;

    $current_url =  home_url( $wp->request );
    $position = strpos( $current_url , '/page' );
    $nopaging_url = ( $position ) ? substr( $current_url, 0, $position ) : $current_url;

    return trailingslashit( $nopaging_url );

}

echo get_nopaging_url();

今、それは常に正しいURLを返します。

メタフィールドなどで投稿をフィルタリングするためのパラメータを追加するある種の投稿フィルタを実装する必要がある場合に便利です。したがって、ユーザがXページでフィルタパラメータを設定しても、新しいフィルタは有効になります。結果は常にベースURLから始まり、ページXではなく、フィルターされた投稿が少ない場合は404をスローします。

6
Ihor Vorotnov

私の詳細はIgor Vorotinovと非常によく似ていましたが、2つ以上のパラメーターがある点が異なります。それで、彼の答えから始めて、私は正規表現を使うようにコードを修正しました:

function get_nopaging_url() {
    $current_url =  $_SERVER[REQUEST_URI];

    $pattern = '/page\\/[0-9]+\\//i';
    $nopaging_url = preg_replace($pattern, '', $current_url);

    return  $nopaging_url;
}
3
Lorenzo

実際には最も簡単な方法は get_pagenum_link() を使用することです。これにより、/page/*パラメータなしで現在のURLが返されます。


'paged'クエリ変数を使用して動的に "Previous"および "Next"リンクを構築するためにそれを使用することもできます。

// Get the current page number.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$first_page = '<a href="' . get_pagenum_link() . '" class="page-first"><<</a>';
$prev_page = '<a href="' . get_pagenum_link($paged - 1) . '" class="page-prev"><</a>';
$next_page = '<a href="' . get_pagenum_link($paged + 1) . ' class="page-next">></a>';

// And having a `WP_Query` object you can also build the link for the last page:
$max = $the_query->max_num_pages;
$last_page = '<a href="' . get_pagenum_link($max) . '" class="page-last">>></a>';
2
leymannx
trait TraitURLStrip {

    /**
     * Strips off paging and query string. Returns a filter-the-results friendly URL
     *
     * @param bool   $str_url
     * @param string $str_page
     *
     * @return bool|string
     */
    protected function urlStrip( $str_url = false , $str_page = 'page' ){

        if ( is_string( $str_url) ) {

            $arr_parse_url = wp_parse_url( $str_url );

            $str_path_no_page = '';
            if ( isset( $arr_parse_url['path'] ) ) {

                // if we're paging then remove that. please!
                $str_path_no_page = preg_replace( "/\/{$str_page}\/[0-9]*\/$/", "/", $arr_parse_url['path'] );

            }

            $str_scheme_Host = "{$arr_parse_url['scheme']}://{$arr_parse_url['Host']}";

            return $str_scheme_Host . $str_path_no_page;
        }
        return false;
    }
}
0
Chief Alchemist

すべての可能なページネーションの組み合わせを削除したい場合、このスニペットを使用します:

// remove pagination from url
$pattern = '/page(\/)*([0-9\/])*/i';
$url = preg_replace($pattern, '', $GLOBALS['wp']->request);

それは世話をします

/page
/page/
/page/1
/page/1/
...

大文字と小文字を区別せず、すべてのページネーションページ番号で機能し、末尾の番号/番号/番号の組み合わせも削除されます...(テスト: https://regex101.com/r/9fQaLC/1 =)

先頭のhttp(s)で完全なURLを取得する場合は、追加するだけです

$url = home_url($url);

その行には、カスタムGETパラメーターを追加することもできます。

$url = home_url($url . '?typ=test');
0
Larzan