如何检索当前URL(无论是主页,存档,文章类型存档,类别存档等),但如果存在则始终没有该/page/{pagenum}/
部分?因此,如果实际网址是:
example.com/category/uncategorized/
要么
example.com/category/uncategorized/page/2/
那么返回值将始终为
example.com/category/uncategorized/
如何检索当前URL(无论是主页,存档,文章类型存档,类别存档等),但如果存在则始终没有该/page/{pagenum}/
部分?因此,如果实际网址是:
example.com/category/uncategorized/
要么
example.com/category/uncategorized/page/2/
那么返回值将始终为
example.com/category/uncategorized/
Answers:
您可以通过获取当前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;
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页上设置了过滤器参数,新的过滤结果也将始终从基本网址开始,而不是第X页,如果过滤的帖子较少,则抛出404。)
/page
子字符串是域名的一部分(当然,如果不使用www的话)。也就是说,imo只是一种边缘情况。但是,我鼓励您通过添加也涵盖这种情况的代码来做出贡献。
实际上,最简单的方法是使用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>';
如果要删除所有可能的分页组合,请使用以下代码段:
// 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 = home_url($url);
在该行中,您还可以添加任何自定义GET参数,如下所示
$url = home_url($url . '?typ=test');
尽管此问题已在此处得到回答(不接受),但此代码段应该可以解决问题:home_url(add_query_arg(NULL, NULL));
。
page/{pagenum}
。
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;
}
}