在静态首页上按ID挂钩页面

时间:2014-08-27 12:54:57

标签: php wordpress wordpress-plugin wordpress-theming

我想在Wordpress CMS上建立一个单页网站。我正在寻找一种通过id将我的页面挂在静态首页上的方法,因为我有几种页面类型。

我试过了:

$id=6; 
$post = get_post($id); 
$content = apply_filters('the_content', $post->post_content); 
echo $content;  

但这只返回内容,而不是HTML中的内容。有关如何实现这一目标的任何提示?或其他方式在Wordpress上建立一个单页的网站?

提前致谢

2 个答案:

答案 0 :(得分:0)

要正确输出HTML,请尝试使用PHP的HTML实体编码/解码相关函数将实体转换回适用的字符(例如<>)。

WordPress有一个名为wpautop的内部函数,它将双换行符(\n)转换为段落拆分。 wp_texturize(或类似名称的东西)会将某些字符转换为适当的变体,例如引号和类似字符。

试试这个:

$content = apply_filters( 'the_content', wpautop( wp_texturize( html_entity_decode( $post -> post_content ) ) ) );

// Note: not properly tested, but should probably output properly "HTMLized" contents.

如果要输出除帖子内容中的HTML标签以外的其他内容(并使用wp-admin中的帖子编辑器插入),则必须使用主题模板。

编辑:

要将整个模板插入主页以创建单页网站,您需要将每个“页面”创建为模板文件。假设您有front-page.phpcontent-about.phpcontent-portfolio.php等等。此外,您很可能拥有header.phpfooter.php

以简化形式,插入front-end.php的每个内容模板可能如下所示:

<?php

/**
 * content-about.php
 */

// Get the wanted content as WP Post.
$page_obj = get_page_by_title( 'About' );
$page_content = wpautop( $page_obj -> post_content );

?>

<article id="about"> <!-- Begin a new section for the one-page template. -->
    <h2><?php echo $page_obj -> post_title; ?></h2>
    <?php echo $page_content; ?>
</article>

其他模板(content-portfolio.phpcontent-contact.php等)应遵循类似的结构。

然后在front-page.php中,您需要像往常一样包含header.phpfooter.php。然后在中间使用get_template_part调用来获取并显示content-abc.php中的front-page.php模板:

<?php

/**
 * front-page.php
 */

get_header(); ?>

<!-- Add some markup if you want to. -->

<?php get_template_part( 'content', 'about' ); // 'content-about.php' ?>
<?php get_template_part( 'content', 'portfolio' ); // 'content-portfolio.php' ?>
<?php get_template_part( 'awesometemplate' ); // 'awesometemplate.php' ?>

<!-- Add some markup if you want to. -->

<?php get_footer();

现在,在WordPress和PHP解析front-page.php模板之后,结果输出可能如下所示(取决于您插入到每个包含的模板中的内容):

<!DOCTYPE html>

<html>

<head>
...
</head>

<body>

    <!-- header.php visible contents here -->

    <!-- content-about.php: -->
    <article id="about">
        <h2>About</h2>
        <p>Well hello there! This is some <em>nice</em> content from content-about.php.</p>
    </article>

    <!-- content-portfolio.php: -->
    <article id="portfolio">
        <h2>Portfolio</h2>
        <ul>
            <li>
            ...
            </li>
        </ul>
    </article>

    <!-- awesometemplate.php: -->
    <article id="awesome">
        <h2>Awesome!</h2>
        <table>
        ...
        </table>
    </article>

    <!-- footer.php visible contents here -->

</body>

</html>

现在,您已经拥有了包含内容的独立模板,并嵌入到front-page.php中以创建单页主模板。如果你愿意,可以使用CSS和JS来使它变得华而不实。

注意:您也可以使用PHP自己的includerequire函数将子模板插入front-page.php

答案 1 :(得分:0)

您还可以使用WP_Query构建自定义查询。您可以使用帖子和页面参数来调用您需要在首页上显示的页面。

在循环内,您可以直接使用the_content等模板标记。您还可以使用is_page()is_page_template()

在每页的基础上有条件地在循环内加载模板标记和HTML结构

这是编解码器的一个例子。修改以满足您的需求

$the_query = new WP_Query( array( 'post_type' => 'post', 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
   the_content();
}
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();