我正在尝试将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.'"';};
}
?>> </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.'"';};
}
?>> </div><section id="main">';
}
function my_theme_wrapper_end() {
echo '</section>';
}
答案 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.'"';};
}
?>> </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>';
}