减少WordPress中的重复代码

时间:2020-02-17 作者:Rajat Sharma

//我的单曲里有这个代码。php文件,我正在尝试减少重复//下面是代码,这段代码对我很有用,但它向我显示了多条//消息,例如/*注意:尝试访问C:\\xampp\\htdocs\\wp-vs-5.3.2\\wp-content\\themes\\personal\\functions中null类型值的数组偏移量。php在线4

注意:未定义索引:C:\\xampp\\htdocs\\wp-vs-5.3.2\\wp-content\\themes\\personal\\functions中的副标题。php在线7

注意:未定义索引:C:\\xampp\\htdocs\\wp-vs-5.3.2\\wp-content\\themes\\personal\\functions中的照片。php第10行*/

// SINGLE.PHP File
while (have_posts() ) {
    the_post();   
  site_banner_section();
  ?>
//函数。PHP文件

<?php

function site_banner_section($args = null) {
  if (!$args[\'title\']) {
    $args[\'title\'] = get_the_title();
  }
  if (!$args[\'subtitle\']) {
    $args[\'subtitle\'] = get_field(\'page_banner_subtitle\');
  }
  if (!$args[\'photo\']) {
    if (get_field(\'page_banner_background_image\')) {
      $args[\'photo\']= get_field(\'page_banner_background_image\')[\'sizes\'][\'bannerImage\'];
    }else{
      $args[\'photo\']=get_theme_file_uri(\'/images/ocean.jpg\');
    }
  }
  ?>
  <div class="page-banner">
  <div class="page-banner__bg-image" style="background-image: url(<?php echo $args[\'photo\']; ?>);"></div>
  <div class="page-banner__content container container--narrow">
    <h1 class="page-banner__title"><?php echo $args[\'title\']; ?></h1>
    <div class="page-banner__intro">
      <p><?php echo $args[\'subtitle\']; ?></p>
    </div>
  </div>
</div>

<?php

1 个回复
SO网友:Rup

function site_banner_section($args = null) {
    if (!$args[\'title\']) {
你从这些台词中得到警告

注意:尝试访问C:\\xampp\\htdocs\\wp-vs-5.3.2\\wp-content\\themes\\personal\\functions中null类型值的数组偏移量。php第4行注意:未定义索引:C:\\xampp\\htdocs\\wp-vs-5.3.2\\wp-content\\themes\\personal\\functions中的subtitle。php在线7

因为$args可能为null,而您仍在尝试将其视为一个数组,并且因为您正在尝试访问可能存在或不存在的属性以检查它们的存在,这可能在其他语言中可用,但在PHP中并不意味着要这样做。您可能需要以下内容:

function site_banner_section( $args = null ) {
    if ( ! is_array( $args ) ) {
        $args = array();
    }
    if ( ! ( array_key_exists( \'title\', $args ) && $args[\'title\'] ) ) {
        $args[\'title\'] = get_the_title();
在我们开始测试$args的属性并在其中设置属性之前,确保它是一个数组,并在尝试检查它是否为非空之前检查“title”是否存在。或者,如果不太可能将null作为参数传递,那么可以使用

function site_banner_section( $args = array() ) {
    if ( ! ( array_key_exists( \'title\', $args ) && $args[\'title\'] ) ) {
我不知道你所说的重复代码是什么意思。如果您的意思是避免重复检查属性是否存在,那么您可以使用wp_parse_args 填写默认值,例如。

function site_banner_section( $args = array() ) {
    $defaults = array(
        \'title\' => get_the_title(),
        // etc.
    );
    $args = wp_parse_args( $args, $defaults );
但是,您需要调用get\\u the\\u title和get\\u字段来填充$默认值,即使您实际上没有使用这些值。

相关推荐