我想在我的Wordpress网站上制作一个通知栏,当发布新帖子时会显示该通知栏。不幸的是,我在使代码工作方面遇到了一些问题。
目标是让用户知道网站上有可用的新帖子,并附有通知栏。所以代码应检查帖子数量是否增加。如果是,我想在网站上显示通知栏两天。
以下代码仅输出我在$post_types
数组中指定的每种帖子类型的帖子总数。 if语句无法正常工作。当我发布新帖子,删除它并发布另一个帖子时,它不会更新数据库中的号码。只有在我删除旧版本后发布时,该值才会增加。
下面的代码现在只回显帖子类型名称和帖子数量。
$args = array(
'public' => true,
'_builtin' => false
);
$post_types = array( 'post', 'roosters', 'downloads', 'reglements', 'alv' );
foreach ( $post_types as $post_type ) {
// variable
$postCountTotal = wp_count_posts( $post_type )->publish;
echo '<strong>' . $post_type . '</strong>';
echo ' has total posts of : ' . $postCountTotal;
echo '<br>';
// First read the previous post count value from the databse so we can compare the old value with the new one
// EDIT: use 0 as the default value if no data in database - first run
$previousCount = get_option( 'post_count_total', 0 );
if ( $postCountTotal != $previousCount ) {
//echo 'New post detected';
update_option( 'post_count_total', $postCountTotal );
} elseif ( '' == $postCountTotal && $previousCount ) {
delete_option( 'post_count_total', $previousCount );
}
}
echo $postCountTotal;
答案 0 :(得分:3)
计算帖子以确定是否有新帖子是浪费资源而不准确,因为帖子状态的转换会影响计数。例如,正如您所说,如果删除帖子并发布新帖子,则计数将保持不变
为了使这项工作,我们需要遵循以下工作流程
我们需要确定发布帖子的时间。这可以通过transition_post_status
操作挂钩完成。每次更改帖子的状态时都会触发此挂钩。即使帖子更新,它的状态也会改变。
我们应该只在发布新帖子时做点什么,所以我们需要检查帖子发布前后的状态(这里的“新”状态不起作用,因为我预期它会起作用,所以我报废了那个想法)。
接下来将保存新的帖子对象到wp_options
表中,我们可以在模板中稍后将其用于显示通知栏。这里使用的函数是add_option()
来创建我们的选项(如果它不存在)和update_option()
如果选项已经存在。
邮政对象现在保存在wp_options
表中。我们现在必须在函数或模板文件中检索该选项。我们将使用get_option()
。从保存的post对象中我们需要获取post_date_gmt
才能将它用于comaprison,我们需要确定2天后的确切时间
我们还需要使用current_time()
在最后一段时间,我们现在可以比较日期,如果我们比较的日期少于两天,我们需要让事情发生,显示通知栏,如果比较超过两天,我们要么什么也不显示
这是最终的代码。我评论得很好,你可以关注它
在您的functions.php中,添加以下内容
add_action( 'transition_post_status', function ( $new_status, $old_status, $post )
{
//Check if our post status then execute our code
if ( $new_status == 'publish' && $old_status != 'publish' ) {
if ( get_option( 'new_post_notification' ) !== false ) {
// The option already exists, so we just update it.
update_option( 'new_post_notification', $post );
} else {
add_option( 'new_post_notification', $post );
}
}
}, 10, 3 );
现在,如果您愿意,可以在模板或自定义功能中添加以下内容
// Get the new_post_notification which holds the newest post
$notification = get_option( 'new_post_notification' );
if( false != $notification ) {
//Get the post's gmt date. This can be changed to post_date
$post_date = strtotime( $notification->post_date_gmt );
//Get the current gmt time
$todays_date = current_time( 'timestamp', true );
//Set the expiry time to two days after the posts is published
$expiry_date = strtotime('+2 day', $post_date);
if( $expiry_date > $todays_date ) {
// Display your notification if two days has not been passed
}
}
答案 1 :(得分:0)
内置WP功能:
<?php
$count_posts = wp_count_posts();
?>
WP Codex提供的良好文件: http://codex.wordpress.org/Function_Reference/wp_count_posts
如果您只想要所有帖子的总数,您应该能够简化代码。
答案 2 :(得分:0)
我需要计算当前语言的帖子数。这是我的代码:
$allpost_arg = array(
'numberposts' => -1,
'post_type' => 'post',
'suppress_filters' => 0,
);
$allposts = get_posts( $allpost_arg );
if($allposts){
$count_the_posts = 0;
foreach ($allposts as $allpost){
$count_the_posts++;
}
}
echo $count_the_posts;