web-dev-qa-db-fra.com

La boucle de type de publication personnalisée génère une erreur 500 lorsqu'elle est utilisée dans un widget

J'essaie d'ajouter une boucle personnalisée de type publication personnalisée dans un widget.

Tout fonctionnait correctement jusqu'à ce que j'ajoute la boucle à la fonction our_team_section_after().

Cependant, je ne trouve aucune erreur de syntaxe. Chaque fois que j'ajoute la boucle, une erreur de 500 serveur interne se produit. Quand je le retire, ça marche bien.

J'utilise le framework Genesis, certains crochets sont donc exclusifs à Genesis.

J'ai vraiment cherché une réponse sur le Web et je n'ai pas eu de chance. Toute aide serait appréciée!

<?php
//Register the widget areas
genesis_register_sidebar( array(
'id' => 'landing-section',
'name' => __( 'Landing Section', 'genesis' ),
'description' => __( 'First Homepage Section.', 'Bootstrap Genesis' ),
) );
genesis_register_sidebar( array(
'id' => 'who-we-are-section',
'name' => __( 'Who We Are Section', 'genesis' ),
'description' => __( 'Who We Are Homepage Section.', 'Bootstrap Genesis' ),
) );
genesis_register_sidebar( array(
'id' => 'creative-process-section',
'name' => __( 'Creative Process Section', 'genesis' ),
'description' => __( 'Creative Process Homepage Section.', 'Bootstrap Genesis' ),
) );
genesis_register_sidebar( array(
'id' => 'services-section',
'name' => __( 'Services Section', 'genesis' ),
'description' => __( 'Services Homepage Section.', 'Bootstrap Genesis' ),
) );
genesis_register_sidebar( array(
'id' => 'our-team-section',
'name' => __( 'Our Team Section', 'genesis' ),
'description' => __( 'Our Team Homepage Section.', 'Bootstrap Genesis' ),
) );
genesis_register_sidebar( array(
'id' => 'case-studies-section',
'name' => __( 'Case Studies Section', 'genesis' ),
'description' => __( 'Case Studies Homepage Section.', 'Bootstrap Genesis' ),
) );
genesis_register_sidebar( array(
'id' => 'worked-with-section',
'name' => __( 'Who We\'ve Worked With', 'genesis' ),
'description' => __( 'Who We\'ve Worked With Homepage Section.', 'Bootstrap Genesis' ),
) );


//* Add the page widget in the content - XHTML
add_action( 'genesis_before_loop', 'front_page_content' );
function front_page_content() {
if ( is_front_page() ){
    genesis_widget_area ('landing-section', array(
        'before' => '<div id="landing-section"><div class="container">',
        'after' => '</div></div>',
    ) );
    genesis_widget_area ('who-we-are-section', array(
        'before' => '<div id="who-we-are-section"><div class="container">',
        'after' => '</div></div>',
    ) );
    genesis_widget_area ('creative-process-section', array(
        'before' => '<div id="creative-process-section"><div class="container">',
        'after' => '</div></div>',
    ) );
    genesis_widget_area ('services-section', array(
        'before' => '<div id="services-section"><div class="container">',
        'after' => '</div></div>',
    ) );
    genesis_widget_area ('our-team-section', array(
        'before' => our_team_section_before(),
        'after' => our_team_section_after(),
    ) );
    genesis_widget_area ('case-studies-section', array(
        'before' => '<div id="case-studies-section"><div class="container">',
        'after' => '</div></div>',
    ) );
    genesis_widget_area ('worked-with-section', array(
        'before' => '<div id="worked-with-section"><div class="container">',
        'after' => '</div></div>',
    ) );
}
}

function our_team_section_before() {
$before = '<div id="our-team-section">';
$before .= '<div class="container">';

return $before;
}

function our_team_section_after() {
$after = '</div>';
    $after .= '<div class="container-fluid">';
        $after .= '<div class="row">';
            $after .= '<div class="col-lg-9 col-sm-8 col-xs-12">';
                $after .= '<div class="owl-carousel">';

                    $args = array(
                        'post_type' => 'team_post_type'
                    );
                    $query = new WP_Query($args);

                    if( $query -> have_posts() ){
                        $query -> while( have_posts() ){
                            $query -> the_post();
                            $after .= '<div>';
                            $after .= the_post_thumbnail();
                            $after .= '</div>';
                        }
                        wp_reset_postdata();
                    }

                $after .= '</div>';
            $after .= '</div>';
            $after .= '<div class="col-lg-3 col-sm-4 col-xs-12">';
                $after .= '<div class="homepage-cta">';
                    $after .= '<span>See Entire Team &gt;</span>';
                $after .= '</div>';
            $after .= '</div>';
        $after .= '</div>';
    $after .= '</div>';
$after .= '</div>';

return $after;
}
1
J Robz

Il y a plusieurs problèmes dans votre code fourni.

$query -> while( have_posts() )

Le type de retour WP_Query() est object. Vous faites référence à une méthode qui n'existe pas. Au lieu de cela, vous devez utiliser les éléments suivants:

while( $query->have_posts() ) {...}

wp_reset_postdata(); à l'intérieur du conditionnel

Cette fonction réinitialise les données de la publication, comme elle le suggère. Si vous l'utilisez dans une condition, et que la condition ne s'exécute pas, les données de votre publication ne seront pas réinitialisées, laissant une requête vide active. Donc, vous devriez l’utiliser en dehors de la condition, ou avant return, si vous renvoyez les données à la place.

the_... au lieu de get_the_...

Si vous souhaitez stocker les données dans une variable, vous devez utiliser une fonction qui renvoie les données, et non les répercuter. the_post_thumbanil() renvoie la vignette, mais vous devez la renvoyer. Donc, vous devriez plutôt utiliser get_the_post_thumbnail(). Ceci s’applique à toutes les fonctions WordPress commençant par the_..., pour autant que je sache.

1
Jack Johansson