web-dev-qa-db-ja.com

ウィジェットで使用するとカスタム投稿タイプループが500エラーをスローする

ウィジェットにカスタム投稿タイプのカスタムループを追加しようとしています。

our_team_section_after()関数にループを追加するまで、ここにあるものはすべて正しく機能しました。

構文エラーは見つかりませんが、ループを追加するたびに500の内部サーバーエラーが発生します。私がそれを取り戻すとき、それはうまく働きます。

私はGenesis Frameworkを使用しているので、いくつかのフックはジェネシスエクスクルーシブです。

私は本当にウェブで答えを探していました、そして、私は運を返しませんでした。任意の助けは大歓迎です!

<?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

提供されたコードにはいくつか問題があります。

$query -> while( have_posts() )

WP_Query() 戻り値の型はobjectです。あなたは存在しない方法を参照しています。代わりに、次のものを使用してください。

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

条件内のwp_reset_postdata();

この関数は、それが示唆するように、投稿のデータをリセットします。条件付きで使用しても条件が実行されない場合、投稿のデータはリセットされず、空のクエリがアクティブになります。そのため、データを返す場合は、条件の外側、またはreturnの前に使用する必要があります。

the_...の代わりにget_the_...

データを変数に格納したい場合は、データをエコーするのではなく、データを返す関数を使用してください。 the_post_thumbanil()はサムネイルをエコーし​​ますが、それを返す必要があります。そのため、代わりにget_the_post_thumbnail()を使用してください。私の知る限り、これはthe_...で始まるすべてのWordPress関数に適用されます。

1
Jack Johansson