我正在开发一个非常复杂的主题,其中我为“标题”和“页脚”创建了自定义帖子类型,并为此启用了WPBakery Page Builder(当前在Wordpress 4.9.8中使用v5.5.5)。
在header.php中,将Header帖子拉入并呈现在
除了进入WooCommerce中的产品类别页面时,所有内容都可以完美地工作,然后页眉和页脚仅显示为页面构建器的原始短代码,而不解析它们。 WooCommerce的其他一切都很好;商店页面,单个产品页面,购物车,结帐都很好。出于某种原因,这只是类别。
这是header.php中的代码:
<?php
$this_page_id = get_queried_object_id();
$gd_page_header = get_post_meta( $this_page_id, 'gd_page_header' );
if(empty($gd_page_header) || count($gd_page_header) == 0 || $gd_page_header[0] == 'default'){
$header_id = intval(get_option('default_header'));
}else{
$header_id = $gd_page_header[0];
}
if(!empty($header_id) && $header_id != '' && $header_id != 'none'){
$post = get_post( $header_id );
$transparent_header = get_post_meta( $post->ID, 'transparent_header', true );
$sticky_header = get_post_meta( $post->ID, 'sticky_header', true );
$sticky_desktop_only = get_post_meta( $post->ID, 'sticky_desktop_only', true );
if($sticky_header == '1'){
$header_class = 'sticky';
if($sticky_desktop_only == '1'){
$header_class .= ' dt_only';
}
}elseif($transparent_header == '1'){
$header_class = 'transparent';
}else{
$header_class = '';
}
$content = $post->post_content;
$content_css = visual_composer()->parseShortcodesCustomCss( $content );
if ( ! empty( $content_css ) ) { ?>
<style type="text/css" data-type="vc_shortcodes-custom-css">
<?php echo strip_tags( $content_css ); ?>
</style>
<?php } ?>
<header class="<?php echo($header_class); ?>">
<div id="container" class="container clearfix">
<?php echo apply_filters( 'the_content', $content ); ?>
</div>
</header>
<?php } ?>
然后这是page.php中的代码,WooCommerce将其内容提取到其中:
<?php get_header(); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<main id="post-<?php the_ID(); ?>">
<div id="container" class="container clearfix">
<?php the_content(); ?>
</div>
</main>
<?php endwhile; endif; ?>
<?php get_footer(); ?>
这是我的测试站点的主页:http://sandbox.graphicdetail.co.nz/
如您所见,所有内容在那里都能很好地显示。 一切也都在“商店”页面上很好地显示:http://sandbox.graphicdetail.co.nz/shop/
但是,当我们进入类别页面时,一切都崩溃了:http://sandbox.graphicdetail.co.nz/product-category/toys/
我知道WPBakery页面生成器在此页面上仍然处于活动状态,因为您可以在header.php代码中看到它所在的位置:
$content_css = visual_composer()->parseShortcodesCustomCss( $content );
if ( ! empty( $content_css ) ) { ?>
<style type="text/css" data-type="vc_shortcodes-custom-css">
<?php echo strip_tags( $content_css ); ?>
</style>
<?php } ?>
...看起来确实不错,因为当我用检查器查看页面时,我可以看到CSS正确填充。
希望这里的某人可能对我去哪里很可怕,非常错误地有所了解?
答案 0 :(得分:0)
为了让遇到此问题的其他人受益,我终于解决了这个难题,这要归功于本文(特别是“模板文件”部分):
http://stephanieleary.com/2010/02/using-shortcodes-everywhere/
所以我的header.php文件中包含以下代码:
<?php $content = $post->post_content; ?>
<header class="<?php echo($header_class); ?>">
<div id="container" class="container clearfix">
<?php echo apply_filters( 'the_content', $content ); ?>
</div>
</header>
我可以确定所有内容均已正确提取,并且CSS已正确解析,依此类推,但这仅仅是出于某种原因未对WPBakery Page Builder的短代码进行解析。
因此,在阅读了斯蒂芬妮·李瑞(Stephanie Leary)的文章后,我决定尝试以下方法:
<?php
$content = $post->post_content;
$content = apply_filters( 'the_content', $content );
?>
<header class="<?php echo($header_class); ?>">
<div id="container" class="container clearfix">
<?php echo do_shortcode($content); ?>
</div>
</header>
因此,我不只是尝试回显apply_filters,还用$ apply_filters填充了$ content变量,然后将$ content解析为简码和whalah!奏效了!
答案 1 :(得分:0)
在回显内容之前使用它:
WPBMap::addAllMappedShortcodes();
echo apply_filters('the_content', the_content());