我正在使用keremiya主题进行wordpress。如果“most_viewed”选项打开,我试图在我的自定义帖子类型中显示我观看次数最多的帖子。我的自定义帖子类型的名称是watch。如何使用我当前的代码执行此操作?我还使用一个名为wp-post views的插件来显示侧边栏中的视图。这是我的查询。
<?php if(get_option('most_viewed') == 'On'): ?>
<div class="sidebar-right">
<h2><?php echo get_option('my_title'); ?></h2>
<div class="fimanaortala">
<?php $tavsayi = get_option('keremiya_tavsiyesayi'); $tavkat = get_option('keremiya_tavsiyekat');?>
<?php query_posts('showposts='.$tavsayi.'&v_orderby=desc&cat='.$tavkat.'') ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="filmana">
<div class="filmsol">
<?php keremiya_resim('80px', '70px', 'izlenen-resim'); ?>
</div>
<div class="filmsag">
<div class="filmsagbaslik">
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</div>
<div class="filmsagicerik">
<?php if(function_exists('the_views')) { the_views(); echo " "; } ?>
<p><?php nezaman_yazildi(); ?></p>
</div>
<div class="filmizleme">
<a href="<?php the_permalink() ?>"><img src="<?php bloginfo('template_directory'); ?>/images/filmizle.png" alt="film izle" height="21" width="61" /></a>
</div>
</div>
</div>
<?php endwhile; else: ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
</div>
</div>
答案 0 :(得分:2)
您的解决方案(或至少尝试)基于一个名为WP-PostViews的插件,我不知道。所以,我无法真正帮助你。但是,如果没有此插件或任何其他插件,我可以帮助您解决问题。所以我们走了:
Wordpress有一些名为metadata的东西。从这个非常自己的链接:
Metadata API是一种简单且标准化的方法,用于检索和操作各种WordPress对象类型的元数据。对象的元数据由简单的键值对表示。对象可能包含多个共享相同键的元数据条目,并且仅在其值上有所不同。
这意味着您可以为自定义帖子类型创建包含已查看次数的元数据。为此,我们创建了一个函数:
<?php
function set_views($post_ID) {
$key = 'views';
$count = get_post_meta($post_ID, $key, true); //retrieves the count
if($count == ''){ //check if the post has ever been seen
//set count to 0
$count = 0;
//just in case
delete_post_meta($post_ID, $key);
//set number of views to zero
add_post_meta($post_ID, $key, '0');
} else{ //increment number of views
$count++;
update_post_meta($post_ID, $key, $count);
}
}
//keeps the count accurate by removing prefetching
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
?>
在给定帖子ID的情况下,每次查看帖子时,都会增加一个计数器。当然,我们必须在代码中的某处调用此函数,以便它实际运行。您可以通过两种方式执行此操作:您可以在单个模板上调用此函数(我相信称为single-watch.php),也可以添加简单的跟踪器。我赞成第二个选项,因为它可以保持你的单个帖子循环清洁。您可以通过这种方式实现此类跟踪:
<?php
function track_custom_post_watch ($post_ID) {
//you can use is_single here, to track all your posts. Here, we're traking custom post 'watch'
if ( !is_singular( 'watch') ) return;
if ( empty ( $post_ID) ) {
//gets the global post
global $post;
//extracts the ID
$post_ID = $post->ID;
}
//calls our previously defined methos
set_views($post_ID);
}
//adds the tracker to wp_head.
add_action( 'wp_head', 'track_custom_post_watch');
?>
你去吧。现在,WordPress会检查用户是否正在访问与 watch 单个帖子相对应的页面。如果是,则递增计数器。
现在唯一剩下的就是查询视图数量最多的帖子。使用WP_Query
可以轻松实现这一点。创建循环时,请执行以下操作:
<?php
$query = new WP_Query( array(
'post_type' => 'watch', //your post type
'posts_per_page' => 1,
'meta_key' => 'views', //the metakey previously defined
'orderby' => 'meta_value_num',
'order' => 'DESC'
)
);
while ($query->have_posts()) {
$query->the_post();
//whatever code you want
}
?>
我保留了对PHP的回答,因此您可以适应您的加价需求。我还假设你的post-type确实叫做 watch 。我希望这一切对你有所帮助。如果您想以稍微不同的方式查询帖子,建议您阅读WP_Query文档。欢呼声。