(Custom) Post Types | Coding | Queries | WordPress

Was ist der Unterschied zwischen publicly_queryable und has_archive?

train 828597 1920

Bei nachfolgenden Funktionen die Arrays mit Slugs und Bezeichnungen von Inhaltstypen ausgeben, unterscheiden sich die Argumente je nachdem, ob Seiten (oder Typen die Seiten entsprechen) dabei sein sollen oder nicht.

Öffentiich zugängliche Inhaltstypen inklusive Seiten

/**
 * returns public post types with pages
 */
function flxo_get_public_post_types() {

	$items = array();

	$args = array(
		'public' => true
	);		

	$post_types = get_post_types( $args, 'objects' ); 

	if ( count( $post_types ) ) {
		foreach ( $post_types as $post_type ) {
			$items[$post_type->name] = $post_type->label;
		}	
	}

	return $items;	

} 

Gibt neben nachfolgenden Standard-Inhaltstypen post, page und attachment auch öffentliche benutzerdefinierte Inhaltstypen zurück.

Array
(
    [post] => Beiträge
    [page] => Seiten
    [attachment] => Medien
    [customtype] ) => Custom Type
)

Öffentlich zugängliche Inhaltstypen exklusive Seiten

/**
 * returns public post types with pages
 */
function flxo_get_public_post_types() {

	$items = array();

	$args = array(
	    'public' => true,
            'publicly_queryable' => true
	);		

	$post_types = get_post_types( $args, 'objects' ); 

	if ( count( $post_types ) ) {
		foreach ( $post_types as $post_type ) {
			$items[$post_type->name] = $post_type->label;
		}	
	}

	return $items;	

} 

Gibt neben den Standard-Inhaltstypen post und attachment auch öffentliche Inhaltstypen zurück die den Argumenten entsprechen.

Array
(
    [post] => Beiträge
    [attachment] => Medien
    [customtype] ) => Custom Type
)

Seiten fehlen in der zweiten Funktionen, denn sie sind nicht publicly_queryable. Es gibt keinen Link http://example.com/?post_type=page der ein Archiv mit Seiten ausgibt.

Der auf true gesetzte Parameter publicly_queryable listet bei Eingabe http://example.com/?post_type=customtype unter customtype geschriebene veröffentlichte (daher funktionert es nicht mit Attachments, da deren post_status inherit ist, nicht publish) Beiträge auf.

Durch publicly_queryable entsteht ein Inhaltstyp-Archiv, das allerdings nicht automatisch Rewrite-Regeln aus den Permalinkeinstellungen übernimmt. Dafür muss zusätzlich der Parameter has_archive auf true gesetzt sein. Das generiert (soweit der Rewrite-Slug nicht explizit verändert wurde) automatisch den Link http://example.com/customtype zum Inhaltstyp-Archiv.

Der Standard-Typ post für Beiträge ist publicly_queryable, has_archive trifft aber nicht zu.

Darauf achten, dass es keine Seite gibt, die denselben Slug verwendet wie ein Inhaltstyp der in den Rewrite-Regeln berücksichtigt werden soll. Diesen Link kann es nur ein Mal geben.

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.