Woocommerce wordpress functions.php - 将php添加到div

时间:2013-11-21 15:54:18

标签: php html wordpress function

我正在尝试将woocommerce整合到非woocommerce主题。除了一个问题,它一切正常。

我的主题有一个名为block的div,它隐藏了内容然后将其淡入/添加填充。我希望这也是在woocommerce页面。

div就像这样

  <div id="block" <?php 
  if ($detect->isMobile()) {if($detect->isTablet()){
  /* Tab */
  if (get_field("search_override_header_position", "options") && get_field("search_tablet_header_position", "options")) {echo 'data-header-position="'.get_field("search_tablet_header_position", "options").'"';} else {echo 'data-header-position="'.$tablet_header_position.'"';};
} else {
  /* Mob */ }
  if (get_field("search_override_header_position", "options") && get_field("search_mobile_header_position", "options")) {echo 'data-header-position="'.get_field("search_mobile_header_position", "options").'"';} else {echo 'data-header-position="'.$mobile_header_position.'"';};
} else {
  /* Desc */
  if (get_field("search_override_header_position", "options") && get_field("search_header_position", "options")) {echo 'data-header-position="'.get_field("search_header_position", "options").'"';} else {echo 'data-header-position="'.$header_position.'"';};
} 
?>>&nbsp;</div>

使用此http://docs.woothemes.com/document/third-party-custom-theme-compatibility/

我试图把它放到PHP的函数中,我得到的只是一个白页和很多语法错误

remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);

add_action('woocommerce_before_main_content', 'my_theme_wrapper_start', 10);
add_action('woocommerce_after_main_content', 'my_theme_wrapper_end', 10);
'
function my_theme_wrapper_start() {
  echo '

    <div id="block" <?php 
      if ($detect->isMobile()) {if($detect->isTablet()){
      /* Tab */
      if (get_field("search_override_header_position", "options") && get_field("search_tablet_header_position", "options")) {echo 'data-header-position="'.get_field("search_tablet_header_position", "options").'"';} else {echo 'data-header-position="'.$tablet_header_position.'"';};
    } else {
      /* Mob */ }
      if (get_field("search_override_header_position", "options") && get_field("search_mobile_header_position", "options")) {echo 'data-header-position="'.get_field("search_mobile_header_position", "options").'"';} else {echo 'data-header-position="'.$mobile_header_position.'"';};
    } else {
      /* Desc */
      if (get_field("search_override_header_position", "options") && get_field("search_header_position", "options")) {echo 'data-header-position="'.get_field("search_header_position", "options").'"';} else {echo 'data-header-position="'.$header_position.'"';};
    } 
    ?>>&nbsp;</div><section id="main">';
}

function my_theme_wrapper_end() {
  echo '</section>';
}

1 个答案:

答案 0 :(得分:0)

您发布的代码存在语法错误,因为您在字符串中使用未转义的单引号。代码也试图注入PHP,这只有在输出代码稍后由PHP处理器解释时才有可能。

有两种方法可以解决这个问题。您可以创建输出缓冲区,然后通过管道发送输出并使用include语句处理,或者将其发送到php eval函数。由于存在安全风险,因此不应使用这些选项。

以下代码可能会提供您的目标结果,而不会产生PHP注入安全风险。

remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);

add_action('woocommerce_before_main_content', 'my_theme_wrapper_start', 10);
add_action('woocommerce_after_main_content', 'my_theme_wrapper_end', 10);
//' Not sure why this quote was here....
function my_theme_wrapper_start() {
  //echo ' 

 // ending PHP processor instruction here will cause code to execute when current function is called

 ?>

<div id="block" <?php 
  if ($detect->isMobile()) {if($detect->isTablet()){
  /* Tab */
  if (get_field("search_override_header_position", "options") && get_field("search_tablet_header_position", "options")) {echo 'data-header-position="'.get_field("search_tablet_header_position", "options").'"';} else {echo 'data-header-position="'.$tablet_header_position.'"';};
} else {
  /* Mob */ }
  if (get_field("search_override_header_position", "options") && get_field("search_mobile_header_position", "options")) {echo 'data-header-position="'.get_field("search_mobile_header_position", "options").'"';} else {echo 'data-header-position="'.$mobile_header_position.'"';};
} else {
  /* Desc */
  if (get_field("search_override_header_position", "options") && get_field("search_header_position", "options")) {echo 'data-header-position="'.get_field("search_header_position", "options").'"';} else {echo 'data-header-position="'.$header_position.'"';};
} 
?>>&nbsp;</div><section id="main"><?php 

// '; // no need for ending quote here but we do need to reopen the PHP processor instruction that we closed above instead of using an echo
}

function my_theme_wrapper_end() {
    echo '</section>';
}