it-swarm.com.de

Aktuelle URL abrufen (Permalink) ohne/page/{pagenum} /

Wie kann ich die aktuelle URL abrufen (ob Homepage, Archiv, Beitragstyparchiv, Kategoriearchiv usw.), aber immer ohne den /page/{pagenum}/-Teil, falls vorhanden? Also, wenn die reale URL ist:

example.com/category/uncategorized/

OR

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

dann ist der Rückgabewert immer

example.com/category/uncategorized/

8
Ihor Vorotnov

Sie können die aktuelle URL über home_url( $wp->request ) abrufen.

Versuchen Sie das folgende Beispiel:

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

Antwort von Govind Kumar funktionierte, gab jedoch nur die URL zurück, wenn/page/{pagenum}/in der URL vorhanden war, und gab nichts zurück, wenn nicht. Ich brauchte eine universelle Lösung, die immer die Basis-URL ohne Paginierung zurückgibt, also habe ich Govinds Code ein wenig modifiziert und in eine Funktion eingebunden:

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

Jetzt wird immer die richtige URL zurückgegeben.

(Dies ist nützlich, wenn Sie eine Art von Post-Filter implementieren müssen, die einen Parameter zum Filtern von Posts nach beispielsweise einem Meta-Feld hinzufügen. Selbst wenn ein Benutzer den Filterparameter auf Seite X festlegt, wird der neue gefiltert Die Ergebnisse beginnen immer mit der Basis-URL, nicht mit Seite X und werfen 404, wenn weniger gefilterte Beiträge vorhanden sind.)

6
Ihor Vorotnov

Meine Besonderheiten waren Igor Vorotinov sehr ähnlich, außer dass ich mehr als einen Parameter hatte. Ausgehend von seiner Antwort habe ich den Code geändert, um einen regulären Ausdruck zu verwenden:

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

Am einfachsten ist es, get_pagenum_link() zu verwenden, um die aktuelle URL ohne /page/*-Parameter zurückzugeben.


Sie können es auch einfach verwenden, um "Vorherige" und "Nächste" Links dynamisch mit der Abfragevariablen 'paged' zu erstellen:

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