单页WP主题

时间:2014-06-27 12:24:16

标签: php wordpress

所以我正在构建WP One Page主题,我希望每个页面都显示在我的静态首页上。我希望用户能够在仪表板中添加/编辑页面内容与标记。当我查看页面模板时,the_content()按照宣传的方式工作,但是当我在静态头版页上需要页面模板时,其他所有内容都会正常显示,但是the_content()是空白的。有任何想法吗??谢谢!

work.php文件

//  Work Template Page -- the_content() works perfectly 


<!-- works -->
<section id="works">

    <!-- container -->
    <div class="container">
        <!-- row -->
        <div class="row">

            <!-- head -->
            <div class="head big wow bounceIn">
                <h3>Our
                    <span class="blue">Works</span>
                </h3>
                <div class="head-break-line">
                    <span class="head-line-blue"></span>
                </div>

                <?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>
                <h6 class="subtext"><?php the_content(); ?></h6>
                <?php endwhile; endif; ?>

            </div>

front-page.php文件

//  Static Front-Page  --  every thing works, but the_content() is blank on this page

<?php require('work.php'); ?> 

3 个答案:

答案 0 :(得分:0)

您是requiring页面,但您已关闭为您提供帖子的循环。看到这里 - &gt;

<?php endwhile; endif; ?>

然后你执行

<?php require('work.php'); ?> 

这永远不会奏效。您需要通过执行以下操作再次执行循环:

<?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>

work.php文件中。

答案 1 :(得分:0)

我已经做到了。我的解决方案使用名为“Long Page”的专用页面模板。默认情况下该页面为空,但我有一组“内容模板”,可以附加到页面。

所以这是条件:在“长页面”上,我遍历所有子页面。如果子页面使用“内容模板”,则会显示它。

这是我的长页:

<?php 
/**
 * Template Name: Long Page
 */

define("IN_LONG_PAGE", true);
$_longpage_elements = array();

get_header(); 
?>

<div class="long_page_wrapper">
    <?php
    // Build the query for child pages
    $args = array(
        'post_parent'   => get_the_ID(),
        'post_type'     => 'page',
        'orderby'       => 'menu_order',
        'order'         => 'ASC',
    );
    $query = new WP_Query( $args );
    if($query->have_posts()): while ( $query->have_posts() ) : $query->the_post();
        // Let's see, if the child pages are actually content pages


        $page_template = get_post_meta($post->ID, "_wp_page_template", true);
        if(preg_match("#(content-templates/ct-)#i", $page_template)){
            $_longpage_elements[] = $post;
        }

    endwhile; endif;

    $query->rewind_posts();

    $num = 0;
    if($query->have_posts()): while ( $query->have_posts() ) : $query->the_post();
        // We will load the custom templates now


        if(in_array($post, $_longpage_elements)){
            $page_template = get_post_meta($post->ID, "_wp_page_template", true);
            $current_index = array_search($post, $_longpage_elements);
            include(trailingslashit(WP_THEME_PATH).$page_template); 
            $num++;
        }

    endwhile; endif;
    ?>
</div>

<?php
    get_footer();
?>

这是简单内容模板的示例。我有几种用于各种目的(手风琴,定价表,大图,联系表格等。)

<?php
/**
 * Template Name: CT Text
 */

global $post, $current_index, $_longpage_elements; 

/*
 * Make sure this file never gets called alone.
 * If so, we redirect to the post parent/home page
 */
if(!defined("IN_LONG_PAGE")) {
    if($post->post_parent){
        $url = get_permalink($post->post_parent)."#".$post->post_name;
    } else {
        $url = get_bloginfo('url');
    }
    wp_redirect($url, 302);
}

$ct_settings = get_post_meta($post->ID, "_ct_settings", true);
if(!is_array($ct_settings)){
    $ct_settings = array();
}

$ct_style = array();
$background_image = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'post-thumbnail' );
if(is_array($background_image)){
    $ct_style[] = 'background-image: url('.$background_image[0].')';
} else {
    $ct_style[] = NULL;
}

$z_index = 100 - intval($current_index);
$ct_style[] = "z-index: ".$z_index;

$ct_style_print = 'style="'.implode("; ", $ct_style).'"';

$textbox_wrapper_class = array('span6', 'position-wrapper', 'the_content');

?>

<div <? post_class("ct-wrapper ct-text clearfix"); ?> id="<?=$post->post_name?>" <?=$ct_style_print?>>
    <div class="container">
        <div class="row">
            <div class="title span12">
                <?php the_title("<h2>", "</h2>"); ?>
            </div>
            <div class="<?=implode(' ', $textbox_wrapper_class)?>" <?=$textbox_wrapper_style_html?>>
                <?php the_content(); ?>
            </div>
        </div>
    </div>
</div>

那里有很多自定义内容,所以它不应该作为复制/粘贴解决方案。但是它应该显示出这种单页面布局如何成为可能的一般概念。我看到的另一个解决方案是使用大量的短代码。但我喜欢将我的内容组织起来并且易于编辑。

答案 2 :(得分:0)

忍受我......我想出了一个简单的方法来获得一个wp的单页主题。不确定这是不是最好的做法,但这是我的目标,而且非常容易理解。顺便说一下,我正在将一个html网站转换为一个主题...之前忘记提及。

所以这里......我已经在我的首页上单独要求每个页面,而不是遍历每个页面。我这样做了所以我可以将每个页面放在我想要的位置,并自定义我的导航菜单:

<?php require('services.php'); ?>
<?php require('work.php'); ?>
<?php require('pricing.php'); ?>
<?php require('team.php'); ?>
<?php require('blog-page.php'); ?>
<?php require('contact.php'); ?>

然后,在每个页面(services.php,work.php等)中我使用了WP_Query:

<?php $your_query = new WP_Query( 'pagename=work' ); ?>
<?php while ( $your_query->have_posts() ) : $your_query->the_post(); ?>

  <?php 
     //  I place all of my static page content below this line
     //  This allows me to use the_title() and the_content() functions  ?>

     <!-- head -->
     <div class="head big wow bounceIn">
        <h3>Our
            <span class="blue"><?php the_title(); ?></span>
        </h3>
        <div class="head-break-line">
           <span class="head-line-blue"></span>
        </div>
           <h6 class="subtext"><?php the_content(); ?></h6>
      </div>
      <!-- .head -->

<?php 
    //  more static content here
?>

然后我重置postdata并添加一个条件语句来显示页脚,如果有人最终单独查看页面:

<?php endwhile; 
  // reset post data (important!)
  wp_reset_postdata(); ?>

<?php
    if ( is_page( 'work' )  ) {    
        // the page is "work" then, 
        get_footer();
    } else { 
        // don't get footer            
    }   
?>   

通过我使用的这种方法,我现在有一个wp的单页主题,用户可以从管理界面更新他们的页面内容,而不会破坏页面的其余部分。