get_field()WordPress上的PHP错误

时间:2018-07-23 10:44:36

标签: php wordpress

我正在尝试掌握WordPress开发。我对PHP有基本的了解,但是我知道在WordPress中进行开发时语法会略有不同。

场景

为了确保我的PHP代码正常运行,我运行了以下测试:

// define query
$args = array('post_type' => 'case-studies' );
$the_query = new WP_Query($args);


// The Loop
if ( $the_query->have_posts() ) { // check, does the query have posts?
	echo '<ul>';
	
    while ( $the_query->have_posts() ) {
		$the_query->the_post(); 
		echo '<li>' .get_the_title() . '</li>'; // spits out page title
	}
    
	echo '</ul>';
	/* Restore original Post Data */
	wp_reset_postdata();
} else {
	// no posts found
}

有效的方法是回显前端的页面标题。

现在,在WordPress中,我已经通过custom fields创建了一个新的字段组:

enter image description here

在与上述相同的文件中,我写了以下内容

if ( $the_query->have_posts() ) { 
    $case-study-heading = get_field('case_study_heading');
    $case-study-subheading = get_field('case_study_subheading');
    $case-study-backgroung = get_field('case_study_background');
    $case-study-play = get_field('case_study_play_button');

    echo $case-study-heading;
} else {
    echo "no posts";
}

在以下一行显示解析错误:语法错误,意外的'='

$case-study-heading = get_field('case_study_heading');

通常在PHP中,我会像这样进行上述查询:

$query = mysqli_query ("SELECT * FROM table_name"){
    $results = mysqli_fetch_assoc ($query);
        $case-study-heading         = results['field_name'];
        $case-study-subheading      = results['field_name']; 


        if($results!=0) {
                echo "<ul>
                          <<li>$case-study-heading<li>
                          <li>$case-study-subheading</li>
                       </ul>";
        } else{
            echo "no rows in db";
        }
}

我是否正确执行WP PHP?如果是这样,关于我为什么会出现解析错误的想法?

Ps。。我在这里看到了ACF documentation。我已经修改了代码以使其与$variable = get_field('field_name');相匹配,但仍然会遇到相同的错误?

编辑:在Will发表评论后,我修改了WP PHP代码:

if ( $the_query->have_posts() ) { 
    $case_study_heading = get_field('case_study_heading');
    $case_study_subheading = get_field('case_study_subheading');
    $case_study_backgroung = get_field('case_study_background');
    $case_study_play = get_field('case_study_play_button');
    
    echo $case_study_heading;
} else {
    echo "no posts";
}

现在,运行此命令后,我看不到任何错误(很好!),但是什么都没显示?甚至else都没有,这意味着if statement在工作吗?

我在WP的那些字段中有文字:

enter image description here

想法?

2 个答案:

答案 0 :(得分:0)

尝试一下。

您需要循环传递get_field中的帖子。否则它将获得当前页面ID

if ( $the_query->have_posts() ) { 
    $PostId = get_the_ID();
    $case_study_heading = get_field('case_study_heading', $PostId);
    $case_study_subheading = get_field('case_study_subheading', $PostId);
    $case_study_backgroung = get_field('case_study_background', $PostId);
    $case_study_play = get_field('case_study_play_button', $PostId);

    echo $case_study_heading;
} else {
    echo "no posts";
}

答案 1 :(得分:0)

如果这是您的代码

if ( $the_query->have_posts() ) { 
    $case_study_heading = get_field('case_study_heading');
    // etc (for brevity)

    echo $case_study_heading;
} else {
    echo "no posts";
}

那么您还没有包含该循环,因此您的get_field()将全部针对包含的帖子/页面,而不是循环中的帖子。

因此,您还需要包括循环:

if ( $the_query->have_posts() ) { 
    while ( $the_query->have_posts() ) {
        $the_query->the_post();

        $case_study_heading = get_field('case_study_heading');
        // etc (for brevity)

        echo $case_study_heading;
    }
} else {
    echo "no posts";
}