Globale $ post verwenden; Über WP_Query erhalten Sie ein vordefiniertes Bild für einen benutzerdefinierten Beitrag

Ich benutze eine site-wide function, um css zum der Seite hinzuzufügen, um vorgestellte Bilder von verschiedenen als ein reaktionsschneller Seitenhintergrund zu ziehen. Es funktioniert großartig auf dem Rest meiner Site, schlägt aber auf einer Seite fehl, auf der ich Posts von einem benutzerdefinierten Post-Typ mit WP_Query . Ich denke, das liegt daran, dass WP_Query nicht die Standardschleife verwendet und meine function global $post; .

Gibt es eine Möglichkeit, die WP_Query Schleife an die function anzupassen? Ich brauche die vorgestellte Bildfunktion, um auch auf dem Rest meiner Seite zu arbeiten, die die Standard-WP-Schleife verwendet.

So rufe ich die benutzerdefinierten Posts auf:

  'portfolio', 'posts_per_page' => 1, 'orderby' => 'rand' ) ); if ( $port_query->have_posts() ): while ( $port_query->have_posts() ) : $port_query->the_post(); ?> 
// page content here
<?php endwhile; wp_reset_postdata(); endif;

Und die function, responsive featured Bilder aus functions.php aufzurufen:

 function bkg_featured_image() { // call the global post variable global $post; if ( has_post_thumbnail( $post->ID ) ) : // checks whether the post has the featured image set // get the post thumbnail ID for the page or post $post_thumbnail_id = get_post_thumbnail_id( $post->ID ); // store the image sizes in an array. You can also add your own image sizes with the add_image_size function $img_sizes = array( 'thumbnail', 'medium', 'large', 'full', 'thumb480', 'thumb768', 'thumb1280', 'thumb1680', 'thumb2048' ); // grab the URL for each image size and store in a variable foreach ( $img_sizes as $img_size ) { ${ 'img_src_' . $img_size } = wp_get_attachment_image_src( $post_thumbnail_id, $img_size ); } echo ' .responsive-bkg { background-image: url(' . esc_url( $img_src_thumb768[0] ) . '); } @media screen and ( min-width: 768px ) { .responsive-bkg { background-image: url(' . esc_url( $img_src_thumb1280[0] ) . '); } } @media screen and ( min-width: 1281px ) { .responsive-bkg { background-image: url(' . esc_url( $img_src_thumb2048[0] ) . '); } } '; endif; // end if the featured image is set } // end function my_featured_image add_action( 'wp_head', 'bkg_featured_image' ); // (this function borrowed from http://s2webpress.com/responsive-featured-image-function-in-wordpress-themes/) 

Solutions Collecting From Web of "Globale $ post verwenden; Über WP_Query erhalten Sie ein vordefiniertes Bild für einen benutzerdefinierten Beitrag"

$port_query->the_post(); sollte den $post global . Das ist nicht das Problem. Das Problem ist, dass Sie $post versuchen, bevor Ihre sekundäre Schleife läuft (99% sicher).

Sie haben die function bkg_featured_image() mit wp_head . wp_head in der Kopfzeile des Dokuments ausgeführt, die, wenn Sie nicht vorsichtig sind, vor dem anderen Vorlagencode ausgeführt wird.

Wenn Sie darüber nachdenken, wie das Laden von WordPress- get_header() funktioniert, werden Sie feststellen, dass get_header() header.php get_header() lädt, die dort sein sollte, wo die Header-Hooks header.php werden. Das bedeutet, dass Code vor get_header() in einer get_header() diese Hooks erfolgreich verwenden kann.

Die Lösung besteht darin, sicherzustellen, dass Ihre sekundäre Schleife vor get_header() . $post sollte auf den ersten Post in diesen Ergebnissen gesetzt werden und Ihr Code sollte funktionieren. Das bedeutet nicht, dass Sie die Ergebnisse vor get_header() , was keinen Sinn ergibt. Sie müssen nur die Abfrage ausführen.

Natürlich haben Sie nur den ersten Post im Loop, indem Sie es so machen.

WP_Query verwendet $ post. Eine vollständige Liste der Methoden und Eigenschaften finden Sie im Codex hier . Sind Sie sicher, dass alle Ihre Portfolio-Objekte über Bilder verfügen? Vielleicht möchtest du 'meta_key' => '_thumbnail_id', im 'meta_key' => '_thumbnail_id', um sicherzustellen, dass das zufällige Portfolio ein Bild enthält. Sie können die Vorlage auch mit einchecken

 if( has_post_thumbnail( $post->ID ) ) : 
// page content here
endif;