output custom Posts on a Page

时间:2011-09-09 作者:dnagirl

我正在尝试编写一个函数,该函数将在页面上输出一组帖子。因为我想显示的不仅仅是帖子标题,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,更棒的是,它是一个在我想要的任何地方调用函数的短代码。

1 个回复
最合适的回答,由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>

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $