我正在尝试编写一个函数,该函数将在页面上输出一组帖子。因为我想显示的不仅仅是帖子标题,wp_get_archives()
(我想)不行。添加帖子列表的函数解析页面元,以找出应该输出什么类型的列表。然后,它对这些帖子类型运行查询,并使用中使用的相同模板片段输出它们archive-{posttype}.php
. 至少应该是这样的。这是我的functions.php
文件:
function ASH_archive(){
global $posts;
$postholder=posts;//so I can reset to original after archives done
if(!$ptype=get_post_meta(\'ASHarchivetype\')) return;//no archive requested
$path="layouts/layout-blog.php";
$pt=\'post\';
switch($ptype){
case \'equipment\':
case \'dyeing\':
case \'spinning\':
case \'weaving\':
$pt=\'ash_\'.$ptype;
$path="layouts/{$ptype}/layout-blog.php";
break;
case \'loomsong\':
$pt=\'ash_loomsong\';
break;
}
$posts=get_posts(array(\'post_type\'=>$pt));
get_template_part($path);
$posts=$postholder; //reset to original value
}
我想使用此模板中的函数:
<?php
/*
Template Name: Archives with Content
*/
get_header(); ?>
<div id="main-col">
<?php
suffusion_page_navigation();
suffusion_before_begin_content();
?>
<div id="content">
<?php
global $post;
if (have_posts()) {
while (have_posts()) {
the_post();
$original_post = $post;
?>
<div <?php post_class(\'fix\'); ?> id="post-<?php the_ID(); ?>">
<?php suffusion_after_begin_post(); ?>
<div class="entry-container fix">
<div class="entry fix">
<?php suffusion_content(); ?>
</div><!--/entry -->
<?php
// Due to the inclusion of Ad Hoc Widgets the global variable $post might have got changed. We will reset it to the original value.
$post = $original_post;
suffusion_after_content();
?>
</div><!-- .entry-container -->
<?php
ASH_archive(); //NOTHING HAPPENS. WHY????
comments_template();
?>
</div><!--/post -->
<?php
}
}
?>
</div></div>
<?php get_footer(); ?>
该函数似乎没有任何作用。我不知道这是因为函数编写不正确,还是需要将其附加到某种挂钩上。我读过关于过滤器和操作的书,但我不知道应该使用哪个钩子来实现我的功能,甚至不知道这是否是正确的方向。帮助
ps,更棒的是,它是一个在我想要的任何地方调用函数的短代码。
最合适的回答,由SO网友:Jeremy Jared 整理而成
我不确定我是否有足够的信息来满足您的期望。我可以告诉你,无论你使用什么过滤器,你所使用的东西对少数人都不起作用。
第一个错误:您使用的括号未闭合
第二,你正在使用if have post。。。但是你在代码的最后重置了它。
下面是我整理的修复上述错误的内容,但我不确定它是否能按您想要的方式工作(至少语法是正确的)。
<?php
/*
Template Name: Archives with Content
*/
get_header(); ?>
<div id="main-col">
<?php
suffusion_page_navigation();
suffusion_before_begin_content();
?>
<div id="content">
<?php
global $post;
if (have_posts()) : while (have_posts()) : the_post();
$original_post = $post;
?>
<div <?php post_class(\'fix\'); ?> id="post-<?php the_ID(); ?>">
<?php suffusion_after_begin_post(); ?>
<div class="entry-container fix">
<div class="entry fix">
<?php suffusion_content(); ?>
</div><!--/entry -->
<?php endwhile; ?>
<?php else : // Due to the inclusion of Ad Hoc Widgets the global variable $post might have got changed. We will reset it to the original value.
$post = $original_post;
suffusion_after_content();
?>
<?php endif; ?>
</div><!-- .entry-container -->
</div>
</div>