php – 如何在wordpress中的短代码函数中包含一个文件
发布时间:2020-12-13 21:51:43 所属栏目:PHP教程 来源:网络整理
导读:我想制作一个短代码,在短代码中我想要一个文件.当用户在编辑器中编写短代码时.输出将显示所需的文件布局. 我做了一个短代码,但这不起作用,这是我的短信代码: ?php function inner_page( $atts,$content = null ){ $return_string = require 'foo/foo_artilc
我想制作一个短代码,在短代码中我想要一个文件.当用户在编辑器中编写短代码时.输出将显示所需的文件布局.
我做了一个短代码,但这不起作用,这是我的短信代码: <?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'); } ?> 这是我的require文件代码 <?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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |