获得第一和第一循环外的自定义帖子类型的最后一篇文章

时间:2013-09-26 20:21:14

标签: php wordpress

我正在使用WP,并且有一个脚本,当单击图像时,使用.load()加载单个帖子内容。浏览每个帖子的箭头位于使用.load()加载的.project div内。

问题是,在第一篇和最后一篇文章中,我只想显示某些箭头。

例如,帖子中的第一个项目被加载,它不应该有“上一个”箭头,因为之前没有帖子。与上一篇文章和“下一个”箭头相同。

所以基本上解决这个问题,我试图想出一个PHP语句(不在循环中)来判断当前帖子是自定义帖子类型中的最后一篇文章还是第一篇文章。

这是我到目前为止所做的...只是不确定如何获得循环之外的第一篇文章和最后一篇文章的ID。除此之外的其他所有东西都经过测试和运作。以下只是代码背后的“逻辑”。

<?php
// Get other posts in post type
$next_post = get_next_post();
$previous_post = get_previous_post();
$current_id = get_the_ID();

// Get ID's of posts
$next_id = $next_post->ID;
$previous_id = $previous_post->ID;

// if($next_id == $previous_id) because on first/last posts, get_next_post
// and get_previous_post return the same value.
if($next_id == $previous_id) {
    if() { 
        // if last post in custom post type
    } else() {
        // if first post in custom post type
    }
}
?>

<?php if(isnt first post) { ?>
    <li class="left" data-projectid="<?php echo $next_id; ?>"></li>
<?php } ?>
<li class="grid"></li>
<?php if(isnt last post) { ?>
    <li class="right" data-projectid="<?php echo $previous_id; ?>"></li>
<?php } ?>

2 个答案:

答案 0 :(得分:1)

我没有和WP合作过多,但由于WP模板都是PHP文件而WP向用户公开了自己的API,因此可以使用其中的任何PHP语法。如果您不关心每次浏览页面时都运行两个查询,那么这将有助于您理解。

<?php

global  $wpdb;
$last_one = FALSE;
$first_one = FALSE;

// Get last one
$last_result = $wpdb->get_results("SELECT `id` FROM `posts` ORDER BY `id` DESC LIMIT 0, 1", ARRAY_A);
if($last_result){ if($last_result['id'] == $next_post){ $last_one = TRUE; } }

// Get first one
$first_result = $wpdb->get_results("SELECT `id` FROM `posts` ORDER BY `id` ASC LIMIT 0, 1", ARRAY_A);
if($first_result){ if($first_result['id'] == $previous_post){ $first_one = TRUE; } }

?>

请记住检查字段和表格的名称,因为我不知道名字。

答案 1 :(得分:0)

结束使用此代码,它工作正常...

编辑:更新代码..如果出于任何原因,其他人需要它:

$args = array('post_type'=>'your_post_type', 'posts_per_page' => -1);
$posts = get_posts($args);
$first_id = $posts[0]->ID; // To get ID of first post in custom post type 
// outside of loop


$last_id = end($posts);
echo $last_id->ID; // To get ID of last post in custom post type outside of loop

if($current_id != $first_id) { ?>
    <li class="left" data-projectid="<?php echo $previous_id; ?>"></li>
<?php } ?>
<?php if($current_id != $last_id->ID) { ?>
    <li class="right" data-projectid="<?php echo $next_id; ?>"></li>
<?php } ?>