Wordpress循环,带有多次返回的自定义函数

Wordpress循环,带有多次返回的自定义函数,wordpress,plugins,Wordpress,Plugins,我在插件中使用了一个自定义函数为Wordpress投票,但由于某种原因,当我在主循环中使用该函数时,完整循环被返回了3次 功能如下: <?php function ShowPostByVotes() { global $wpdb, $voteiu_databasetable; mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error()); mysql_select_db(DB_N

我在插件中使用了一个自定义函数为Wordpress投票,但由于某种原因,当我在主循环中使用该函数时,完整循环被返回了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;

    }
    ?>
<?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(); ?>
index.php如下所示:

<?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;

    }
    ?>
<?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(); ?>
有人知道为什么会发生这种情况吗?

嗨@Lee Simpson:

这段代码是我见过的用于WordPress的最痛苦的代码之一。它之所以如此糟糕,是因为它完全绕过了WordPressAPI,而不是以一种好的方式

如果你能描述投票数据的存储位置,你没有发布GetVote函数,所以我不能告诉你投票在哪里,我想我们可以大大简化这种肮脏的行为

-迈克