我正在使用我在此处找到的 WordPress Vote It Up 插件中的自定义函数。但是,由于某种原因,当我在主循环中使用该函数时,完整循环将返回 3 次。
功能如下:
<?php
function ShowPostByVotes() {
global $wpdb, $voteiu_databasetable;
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());
//Set a limit to reduce time taken for script to run
$upperlimit = get_option('voteiu_limit');
if ($upperlimit == '') {
$upperlimit = 100;
}
$lowerlimit = 0;
$votesarray = array();
$querystr = "
SELECT *
FROM $wpdb->posts
WHERE post_status = 'publish'
AND post_type = 'post'
ORDER BY post_date DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
//Use wordpress posts table
//For posts to be available for vote editing, they must be published posts.
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());
//Sorts by date instead of ID for more accurate representation
$posttablecontents = mysql_query("SELECT ID FROM ".$wpdb->prefix."posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date_gmt DESC LIMIT ".$lowerlimit.", ".$upperlimit."") or die(mysql_error());
$returnarray = array();
while ($row = mysql_fetch_array($posttablecontents)) {
$post_id = $row['ID'];
$vote_array = GetVotes($post_id, "array");
array_push($votesarray, array(GetVotes($post_id)));
}
array_multisort($votesarray, SORT_DESC, $pageposts);
$output = $pageposts;
return $output;
}
?>
index.php如下:
<?php get_header(); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?> <span>
<?php $pageposts = ShowPostByVotes(); ?>
<?php if ($pageposts): ?> <?php foreach ($pageposts as $post): ?>
<div>
<?php the_title(); ?>
<?php the_content(); ?>
<?php DisplayVotes(get_the_ID()); ?>
<br /><br />
</div>
<?php endforeach; ?>
</span>
<?php endif; ?>
<?php endwhile; endif; ?>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
有人知道为什么会发生这种情况吗?
@李·辛普森:
该代码是我见过的用于 WordPress 的最痛苦的代码之一。它之所以如此糟糕,是因为它完全绕过了 WordPress API,而且不是以一种好的方式。如果你可以描述投票数据的存储位置
(你没有发布GetVote()
函数,所以我无法告诉投票在哪里)我认为我们可以大大简化这种肮脏的事情。 -迈克