Ich habe zwei benutzerdefinierte Beitragstypen namens Künstler und Gemälde. Beide Beitragstypen haben ein benutzerdefiniertes Feld namens Künstlername erstellt mit dem Advanced Custom Fields-Plugin. Ich muss in der Lage sein, die benutzerdefinierten Felder dieser beiden Beitragstypen miteinander abzugleichen, um weitere Informationen anzuzeigen.
Fügen Sie unten nur die Argumente und die Schleife aus der Abfrage ein. Werde bei Bedarf mehr Code posten.
<?php
$artist_name = get_field('artist');
$args = array(
'post_type' => 'artists',
'meta_value' => $artist_name
);
$query_artist = new WP_Query( $args );
if ( $query_artist->have_posts() ) {
while ( $query_artist->have_posts() ) {
$query_artist->the_post(); ?>
<p class="artist-name"><a href="https://stackoverflow.com/questions/22655828/<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php }
} else {
echo 'Artist not found';
}
wp_reset_postdata(); ?>
Dieser Code funktioniert ordnungsgemäß in der Vorlagendatei für die Homepage, gibt aber immer „Künstler nicht gefunden“ aus, wenn er auf der Suchergebnisseite angezeigt wird. Ich habe diesen Code direkt aus der Homepage-Vorlage kopiert, damit Rechtschreibfehler nicht das Problem sind. Zerbreche mir darüber schon lange den Kopf. Wird jemand, der dies liest, eine Ahnung haben, was passiert?
Vielen Dank.
Ok, ich habe es also geschafft, endlich das zu bekommen, was ich arbeiten möchte, aber ich bin mir nicht sicher, warum der folgende Code funktioniert hat und mein Original nicht, da beide ähnliche Methoden sind, um eine neue Abfrage durchzuführen.
Hier der Code, falls noch jemand das gleiche Problem hatte:
<?php
// Permalink for artist
$artist_name = get_field('artist');
global $post;
$posts = get_posts( array( 'post_type' => 'artists', 'meta_value' => $artist_name ) );
if( $posts ):
foreach( $posts as $post ) :
setup_postdata($post); ?>
<p class="artist-name"><a href="https://stackoverflow.com/questions/22655828/<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach;
wp_reset_postdata();
endif; ?>
Ich denke, dass WordPress benutzerdefinierte Typen nicht automatisch in die Suche einbezieht.
Sie können ein Plugin wie verwenden https://wordpress.org/plugins/advanced-custom-post-search/ oder schreiben Sie Ihre eigene Funktion in die functions.php
function rc_add_cpts_to_search($query) {
// Check to verify it's search page
if( is_search() ) {
// Get post types
$post_types = get_post_types(array('public' => true, 'exclude_from_search' => false), 'objects');
$searchable_types = array();
// Add available post types
if( $post_types ) {
foreach( $post_types as $type) {
$searchable_types[] = $type->name;
}
}
$query->set( 'post_type', $searchable_types );
}
return $query;
}
add_action( 'pre_get_posts', 'rc_add_cpts_to_search' );
Beispiel aus http://www.remicorson.com/include-all-your-wordpress-custom-post-types-in-search/
12837900cookie-checkWP-Abfrage durchläuft den benutzerdefinierten Beitragstyp, der auf der Startseite, aber nicht auf der Suchseite funktioniertyes