获取当前URL(固定链接),但不使用/page/{pagenum}/

时间:2016-11-29 作者:Ihor Vorotnov

如何检索当前URL(无论是主页、存档、帖子类型存档、类别存档等),但始终without 这个/page/{pagenum}/ 如果有,就分开?因此,如果实际URL是:

example.com/category/uncategorized/

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

那么返回值将始终为

example.com/category/uncategorized/

7 个回复
最合适的回答,由SO网友:GKS 整理而成

您可以通过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;

SO网友:leymannx

实际上最简单的方法是使用get_pagenum_link() 它将返回当前URL,而不返回任何/page/* 参数。

您还可以简单地使用它动态地使用\'paged\' 查询变量:

// 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>\';

SO网友:Ihor Vorotnov

答复人Govind Kumar 但是,如果URL中存在/page/{pagenum},它只返回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。)

SO网友:Lorenzo

我的细节与Ihor Vorotnov的非常相似,只是我有多个参数。因此,从他的答案开始,我修改了代码以使用正则表达式:

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

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

    return  $nopaging_url;
}

SO网友:Larzan

如果你想的话remove all possible pagination combinations 然后使用以下代码段:

// 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的完整url,只需添加

$url = home_url($url);
在这一行中,您还可以添加任何自定义GET参数,如下所示

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

SO网友:Fabian Marz

虽然这个问题已经得到了回答here (不接受),此代码段应起到以下作用:home_url(add_query_arg(NULL, NULL));.

SO网友:Chief Alchemist
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;
    }
}

相关推荐

GoBlog Free Pagination Issue

第一次海报,我的名字是约翰尼。:)我已经为我的网站建立了一个存档页面,我非常自豪(使用Elementor),但我不希望这个主题的主页分页。我想在主页上显示6篇最新的帖子,如果读者想找到更多,他们必须点击顶部的存档页面。充分披露:我是一个完全的n00b在任何类型的编程。我以前做过一些非常基本的python,但仅此而已。我找到了用于分页的代码,它如下所示:?> <div class="grids grids1"> <div class=&qu