我想制作一个短代码,在短代码中我想要一个文件.当用户在编辑器中编写短代码时.输出将显示所需的文件布局.
<?PHP
function inner_page( $atts, $content = null ){
$return_string = require 'foo/foo_artilces_list.PHP';
return $return_string;
}
add_action('init', 'register_section_shortcodes');
function register_section_shortcodes(){
add_shortcode('inner_page', 'inner_page');
}
?>
<?PHP
/*=========
Template Name: KBE
=========*/
get_header();
?>
<div id="foo_container">
<h1><?PHP the_title(); ?></h1>
<!--Breadcrum-->
<?PHP
if(FOO_BREADCRUMBS_SETTING == 1){
?>
<div class="foo_breadcrum">
<?PHP echo foo_breadcrumbs(); ?>
</div>
<?PHP
}
?>
<!--/Breadcrum-->
<!--search field-->
<?PHP
if(FOO_SEARCH_SETTING == 1){
?>
<div class="foo_search_field">
<input name="" type="text" placeholder="Search the kNowledgebase..." />
</div>
<?PHP
}
?>
<!--/search field-->
<!--content-->
<?PHP
if(FOO_SIDEBAR_SETTING == 0){
?>
<div id="foo_content" class="foo_content_full" >
<?PHP
}
elseif(FOO_SIDEBAR_SETTING == 1){
?>
<div id="foo_content" class="foo_content_right" >
<?PHP
}
elseif(FOO_SIDEBAR_SETTING == 2){
?>
<div id="foo_content">
<?PHP
}
?>
<!--leftcol-->
<div class="foo_leftcol">
<div class="foo_categories">
<?PHP
$foo_cat_args = array(
'orderby' => 'term_order',
'order' => 'ASC',
'hide_empty' => true,
);
$foo_terms = get_terms(FOO_POST_TAXONOMY, $foo_cat_args);
foreach($foo_terms as $foo_cat){
$foo_term_id = $foo_cat->term_id;
$foo_term_slug = $foo_cat->slug;
$foo_term_name = $foo_cat->name;
?>
<div class="foo_category">
<h2>
<span class="foo_count"><?PHP echo FOO_ARTICLE_QTY; ?> Articles</span>
<a href="<?PHP echo get_term_link($foo_term_slug, 'foo_cat') ?>" title="<?PHP
sprintf( __( "View all posts in %s" ), $foo_term_name ) ?>"><?PHP echo $foo_term_name; ?></a>
</h2>
<ul class="foo_article_list">
<?PHP
$foo_tax_post_args = array(
'post_type' => FOO_POST_TYPE,
'posts_per_page' => FOO_ARTICLE_QTY,
'orderby' => 'name',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => FOO_POST_TAXONOMY,
'field' => 'slug',
'terms' => $foo_term_slug
)
)
);
$foo_tax_post_qry = new WP_Query($foo_tax_post_args);
if($foo_tax_post_qry->have_posts()) :
while($foo_tax_post_qry->have_posts()) :
$foo_tax_post_qry->the_post();
?>
<li>
<a href="<?PHP the_permalink(); ?>">
<?PHP the_title(); ?>
</a>
</li>
<?PHP
endwhile;
else :
echo "No posts";
endif;
?>
</ul>
</div>
<?PHP
}
?>
</div>
</div>
<!--/leftcol-->
<!--aside-->
<?PHP
if((FOO_SIDEBAR_SETTING == 2) || (FOO_SIDEBAR_SETTING == 1)){
dynamic_sidebar('foo_cat_widget');
}
?>
<!--/aside-->
</div><!--content-->
</div>
<?PHP
get_footer();
?>
它只显示小部件和所有布局变得混乱.
任何的想法
解决方法:
你有两个问题.
首先,要求不返回任何东西.它只是从文件中“导入”代码,并在您发出require调用的位置运行它.因此,新文件中的所有内容都会显示在wordpress处理的其他内容之前.
您可以使用输出缓冲区来避免这种情况.这个:
$return_string = require 'foo/foo_artilces_list.PHP';
应该是这样的:
ob_start();
require 'foo/foo_artilces_list.PHP';
$return_string = ob_get_flush();
现在你可以返回字符串,wordpress将完成其余的工作.
第二个问题:你的get_header()和get_footer()调用. wordpress已经打印了它的标题,你的电话会再次显示它.页脚也是如此…包含的文件将显示页脚,wordpress将在页面末尾第二次显示页脚.您应该从包含的文件中删除两个调用.
使用输出缓冲区不是一个非常干净的解决方案.最好将所有输出放在包含文件中的函数中,该函数将所有内容存储在函数返回的变量中.然后你可以这样做:
require('foo/foo_artilces_list.PHP');
$return_string = my_function();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。