Überprüfen Sie, was bei URI ist (Post, Archiv, etc …)

Gibt es einen Weg oder eine function, wo Sie eine benutzerdefinierte URI wie übergeben können

uri-part/uri-part2 

und wir können überprüfen, was unter dieser Adresse ist?

Ich möchte überprüfen, ob ein URI einen Post, eine Seite, ein Archiv, eine Kategorie, ein Tag, eine andere Taxonomie, ein benutzerdefiniertes Post-Archiv oder eine benutzerdefinierte Post enthält.

Solutions Collecting From Web of "Überprüfen Sie, was bei URI ist (Post, Archiv, etc …)"

Abrufen des “Typs” der Abfrage von der URL: Vorherige Vorschläge

Wie in der verknüpften Antwort angegeben, gibt es url_to_postid() . Dadurch erhalten Sie nur die ID des Objekts an diesem Endpunkt. Lange \WP_Query , \WP_Query : Diese function gibt nur eine ID zurück und führt dann eine neue \WP_Query , um das Post-Type-Objekt aus der DB zu holen und schließlich die URl zurückzugeben – wenn es etwas gibt und _wenn es etwas von is_singular (ein Post, eine Seite) ). Diese function ist also nicht wirklich hilfreich.

Wie in den Kommentaren erwähnt, gibt es auch:

 $object = get_page_by_path( 'path/endpoint', OBJECT|ARRAY_N|ARRAY_A, [ 'post', 'page', 'custom_post_type', '…' ] ); 

welche die folgende Abfrage ausführen wird:

 $sql = " SELECT ID, post_name, post_parent, post_type FROM $wpdb->posts WHERE post_name IN ( $in_string ) AND post_type IN ( $post_types_string ) "; 

Und nochmal: Nicht hilfreich.

WordPress URL zum Abfragen: Hinter den Kulissen

So sieht der process in WordPress aus

 ------- -------------- ------------- | URl | --> | Query Vars | --> | \WP_Query | ------- -------------- ------------- 

Wie von @TheDeadMedic erwähnt, gibt es WP::parse_request() , das all die Magie vollbringt:

  1. Abrufen aller Abfragevariablen
  2. Fetch rewrite rules
  3. Suchen Sie nach Übereinstimmungen zwischen den Anforderungs- und Neuschreibungsregeln
  4. Führen Sie registrierte Abfragevariablen über einen Whitelist-Filter aus

Währenddessen füllt die Methode tatsächlich ein assoziatives Array: WP::$query_vars :

 WP::$query_vars = [ // $_POST or $_GET or query string variables `foo=bar&baz=dragons` // `custom` is not the actual name. The key will be named as the var. 'custom' => [], // An array of `$postTypeObject->query_var`s // Only those which are publicly queryable 'post_type' => [], // Only publicly queryable taxonomies 'taxonomy' => [], 'term' => [], 'name' => [], 'error' => [], // … ]; 

Am Ende dieser Methode haben Sie zwei Filter. Der erste ist:

 $this->query_vars = apply_filters( 'request', $this->query_vars ); 

wo Sie das oben genannte Array vorhanden haben. Jetzt können Sie bestimmen, welche Art von Antwort Ihre URl bedient:

 add_filter( 'request', function( Array $vars ) { // do whatever you need to do, depending on $vars in here return $vars; } ); 

Beispiele für einige var_dump( $vars ) :

  • Datumsbasiertes Archiv:

     array (size=2) 'year' => string '2016' (length=4) 'monthnum' => string '04' (length=2) 
  • Archiv der Kategorie:

     array (size=1) 'category_name' => string 'alignment' (length=9) 
  • Hierarchisches Taxonomie-Kind:

     array (size=1) 'category_name' => string 'parent-category/child-category-05' (length=33) 
  • Eine einzelne Ansicht wird gepostet – sticky ist die gleiche wie die Standardansicht:

     array (size=2) 'page' => string '' (length=0) 'name' => string 'sticky' (length=6)