我有两个单独的页面,显示了一个不同类别的列表,链接到wordpress中的完整帖子。这两个目前都在我的主题中的single.php上打开,但每个页面上的类别需要有不同的样式。
我已经创建了模板页面,但不知道如何在single.php 之外的另一个页面上打开帖子
简化:如何在另一个版本的single.php 上打开帖子
我打开完整帖子的代码是:
<?php // PAGE LINK/TITLE
if (is_page()) {
$cat=get_cat_ID($post->post_title); //use page title to get a category ID
$posts = get_posts ("category_name=case-study&posts_per_page=10");
if ($posts) {
foreach ($posts as $post):
setup_postdata($post);
?>
<div class="serve-inner-split">
<div id="case-split">
<div id="case-left" class=" serve-left">
<div id="case-study-content">
<h1 class="case-study-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h1>
<p><?php //PULLS IN EXCERPT
$my_excerpt = get_the_excerpt();
if ( '' != $my_excerpt ) {
// Some string manipulation performed
}
echo $my_excerpt; // Outputs the processed value to the page
?>
</p>
<a href="#" class="header-quote">READ CASE STUDY</a>
</div>
</div>
<div id="case-right" class="serve-grey">
<?php
if ( has_post_thumbnail() ) { // PULLS IN IMAGE check if the post has a Post Thumbnail assigned to it.
the_post_thumbnail();
}
?>
</div>
</div>
</div>
<?php endforeach;
}
}
?>
Hello:)我将通过为每种需要以不同方式显示单个帖子的情况创建自定义帖子类型来实现这一点。您可以参考WP Codexhttps://codex.wordpress.org/Post_Types关于这个案子。最终,它将允许您创建尽可能多的单个帖子模板。
我会创建额外的类别字段。在functions.php
中添加
add_action ( 'edit_category_form_fields', 'mytheme_extra_category_fields');
add_action ( 'category_add_form_fields', 'mytheme_extra_add_category_fields');
if ( ! function_exists( 'mytheme_extra_category_fields' ) ){
function mytheme_extra_category_fields( $tag ) {
$t_id = $tag->term_id;
$cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php esc_attr_e('Blog Layout', 'mytheme'); ?></label></th>
<td>
<select name="Cat_meta[blog_layout]">
<?php
echo '<option value="layout1" '.selected( $cat_meta['blog_layout'], 'layout1', false).'>'.esc_html__('Layout 1', 'mytheme').'</option> ';
echo '<option value="layout2" '.selected( $cat_meta['blog_layout'], 'layout2', false).'>'.esc_html__('Layout 2', 'mytheme').'</option> ';
?>
</select>
</td>
</tr>
<?php
}
}
if ( ! function_exists( 'mytheme_extra_add_category_fields' ) ){
function mytheme_extra_add_category_fields( $tag ) {
$t_id = (is_object($tag))?$tag->term_id:'';
$cat_meta = get_option( "category_$t_id");
?>
<div class="form-field">
<label for="extra1"><?php esc_attr_e('Blog Layout', 'mytheme'); ?></label></th>
<select name="Cat_meta[blog_layout]">
<?php
echo '<option value="layout1" '.selected( $cat_meta['blog_layout'], 'layout1', false).'>'.esc_html__('Layout 1', 'mytheme').'</option> ';
echo '<option value="layout2" '.selected( $cat_meta['blog_layout'], 'layout2', false).'>'.esc_html__('Layout 2', 'mytheme').'</option> ';
?>
</select>
</div>
<?php
}
}
add_action ( 'edited_category', 'mytheme_save_extra_category_fileds');
add_action ( 'created_category', 'mytheme_save_extra_category_fileds');
if ( ! function_exists( 'mytheme_save_extra_category_fileds' ) ){
function mytheme_save_extra_category_fileds( $term_id ) {
if ( isset( $_POST['Cat_meta'] ) ) {
$t_id = $term_id;
$cat_meta = get_option( "category_$t_id");
$cat_keys = array_keys($_POST['Cat_meta']);
foreach ($cat_keys as $key){
if(isset($_POST['Cat_meta'][$key])){
$cat_meta[$key] = $_POST['Cat_meta'][$key];
}
}
update_option( "category_$t_id", $cat_meta );
}
}
}
当你将类别添加到你的帖子时,这应该会输出选择的"博客布局"。然后在您的index.php
中添加
$cat_id = get_query_var('cat');
$cat_data = get_option("category_$cat_id");
<?php if(isset($cat_data['blog_layout']) && $cat_data['blog_layout'] == 'layout1'): ?>
''Your layout1 here
<?php else: ?>
''Your layout2 here
<?php endif; ?>
这应该行得通。
为了解决这个问题,我用以下代码替换了整个single.php文件:
<?php
if (in_category('2')) {include (TEMPLATEPATH . '/page-case-study-post.php');
}
else { include (TEMPLATEPATH . '/page-services-post.php');
}
?>;
根据其设置将任一类别发送到两个不同的页面。