web-dev-qa-db-fra.com

Obtenir l'URL actuelle (permalien) sans/page/{pagenum} /

Comment puis-je récupérer l'URL actuelle (page d'accueil, archive, archive de type de publication, archive de catégorie, etc.) mais toujours sans la partie /page/{pagenum}/ si elle est présente? Donc, si l'URL réelle est:

example.com/category/uncategorized/

OR

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

alors la valeur de retour sera toujours

example.com/category/uncategorized/

8
Ihor Vorotnov

Vous pouvez obtenir l'URL actuelle via home_url( $wp->request ).

Essayez l'exemple ci-dessous:

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

Réponse de Govind Kumar a travaillé, cependant, il n'a renvoyé l'URL que si/page/{pagenum}/était présent dans l'URL et n'a renvoyé rien sinon. J'avais besoin d'une solution universelle qui renverrait toujours l'URL de base sans pagination. J'ai donc modifié un peu le code de Govind et l'ai intégré dans une fonction:

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();

Maintenant, il renvoie toujours l'URL correcte.

( Ceci est utile si vous devez implémenter une sorte de filtres de publication qui ajoute un paramètre pour filtrer les publications par, par exemple, une méta-déposée. Ainsi, même si un utilisateur définit le paramètre de filtre sur la page X, le nouveau filtre les résultats commenceront toujours à partir de l'URL de base, et non de la page X et des 404 jetons s'il y a moins de messages filtrés. )

6
Ihor Vorotnov

Mes spécificités étaient très similaires à Igor Vorotinov, sauf que j'avais plus d'un paramètre. Donc, à partir de sa réponse, j'ai modifié le code pour utiliser une expression régulière:

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
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