Функция от функции VoteItUp Вордпресс


Этот код берется из WordPress плагин форум голос его. Это вроде должности путем голосования. Куча людей говорят, что там больше кода, чем это необходимо. Так что я был интересно, если кто-нибудь есть идеи о том, как очистить его немного.

votingfunctions.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:

$pageposts = ShowPostByVotes();

?>
 <?php if ($pageposts): ?>
  <?php foreach ($pageposts as $post): ?>
    <?php setup_postdata($post); ?>

Внимание! Выше код-это что-то вроде:

<?php if (have_posts()) : ?>

        <?php while (have_posts()) : the_post(); ?>

таким образом, в цикле foreach вы можете использовать высказывания типа в стандарте "петля", например the_content, the_time(). Чтобы положить конец этому добавить

<?php endforeach; ?>

  <?php else : ?>
    <h2 class="center">Not Found</h2>
    <p class="center">Sorry, but you are looking for something that isn't here.</p>
    <?php include (TEMPLATEPATH . "/searchform.php"); ?>
 <?php endif; ?>

Редактировать:

Как запустить пользовательскую петли:

        <?php $custom_posts = new WP_Query(); ?>
        <?php $custom_posts->query('category_name=Pictures'); ?>
        <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
            <div class="content-block-2">
                <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_content(); ?></a>
            </div>
        <?php endwhile; ?>


339
3
задан 25 марта 2011 в 09:03 Источник Поделиться
Комментарии
1 ответ

Это мои предложения


  1. Не использовать MySQL-функции для подключения и запроса в WordPress.
    Вы можете заменить первый оператор SQL с WP_Query.

    $query = new WP_Query('post_type=post&post_status=publish&orderby=date&order=DESC');
    $pageposts = $query->get_posts();

    Таким образом, код является довольно защищены от будущих изменений базы данных WordPress.


  2. Вторая инструкция Select является немного излишним, поскольку каждый $Post в $pagepost уже содержит ID сообщения.
    Единственное, чего не хватает-это предел, но мы добавим, что в WP_Query, добавив

    $query = new WP_Query('post_type=post&post_status=publish&orderby=date&posts_per_page='.$upperlimit);

  3. Рефакторинг и удалить неиспользуемые/ненужные код

    глобальный $wpdb, $voteiu_databasetable - не нужны больше
    $верхняя граница - задание может быть сделано в одной строке
    $lowerlimit - не используется, так как это достаточно с $верхняя граница
    $вывода = $pageposts; - assigmentent перед возвращением ненужно


Так что полный ShowPostByVotes в votingfunctions.php будет выглядеть так:

function ShowPostByVotes() {

$upperlimit = is_numeric(get_option('voteiu_limit')) ? get_option('voteiu_limit') : 100 ;

$query = new WP_Query('post_type=post&post_status=publish&orderby=date&posts_per_page='.$upperlimit);
$pageposts = $query->get_posts();
$votesarray = array();
foreach ($pageposts as $post) {
$vote_array = GetVotes($post->ID, "array");
array_push($votesarray, array(GetVotes($post->ID)));
}

array_multisort($votesarray, SORT_DESC, $pageposts);
return $pageposts;

}

И вы можете использовать ее в своем index.php используя этот код

 <?php $pageposts = ShowPostByVotes();  ?>
<?php if ($pageposts): ?>
<?php global $post; ?>
<?php foreach ($pageposts as $post): ?>
<?php setup_postdata($post); ?>

<div class="post" id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
<div class="entry">
<?php the_content('Read the rest of this entry »'); ?>
</div>

<p class="postmetadata">Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?>
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p>
</div>
<?php endforeach; ?>

<?php else : ?>
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>
<?php include (TEMPLATEPATH . "/searchform.php"); ?>
<?php endif; ?>

2
ответ дан 27 марта 2011 в 08:03 Источник Поделиться