我想在Wordpress CMS上建立一个单页网站。我正在寻找一种通过id将我的页面挂在静态首页上的方法,因为我有几种页面类型。
我试过了:
$id=6;
$post = get_post($id);
$content = apply_filters('the_content', $post->post_content);
echo $content;
但这只返回内容,而不是HTML中的内容。有关如何实现这一目标的任何提示?或其他方式在Wordpress上建立一个单页的网站?
提前致谢
答案 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.php
,content-about.php
,content-portfolio.php
等等。此外,您很可能拥有header.php
和footer.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.php
,content-contact.php
等)应遵循类似的结构。
然后在front-page.php
中,您需要像往常一样包含header.php
和footer.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自己的include
或require
函数将子模板插入front-page.php
。
答案 1 :(得分:0)
您还可以使用WP_Query
构建自定义查询。您可以使用帖子和页面参数来调用您需要在首页上显示的页面。
在循环内,您可以直接使用the_content
等模板标记。您还可以使用is_page()
或is_page_template()
这是编解码器的一个例子。修改以满足您的需求
$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();