具有自定义字段查询的自定义页面的分页

时间:2021-10-12 作者:Wordpress Guest

您好,我创建了一个自定义php文件,用于在自定义字段中按值显示特定帖子。例如,我有100篇帖子,假设它们都有自定义字段MyTitle,其中10篇有value“;新建;。

$querystr = "
            SELECT $wpdb->posts.* 
            FROM $wpdb->posts, $wpdb->postmeta
            WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
            AND $wpdb->postmeta.meta_key = \'Mytitle\' 
            AND $wpdb->postmeta.meta_value LIKE \'%".$mytitle."%\' 
            AND $wpdb->posts.post_status = \'publish\' 
            AND $wpdb->posts.post_type = \'post\'
            AND $wpdb->posts.post_date < NOW()
            ORDER BY $wpdb->posts.post_date DESC
         ";

         $pageposts = $wpdb->get_results($querystr, OBJECT);
所以我使用代码来显示这些帖子,但是我想添加分页。我在这里和互联网上都做了一些搜索,但所有的分页都是不同的,都是关于获取;第paged页;从主查询。。我真的不明白那部分。那么,你能给我展示一些我可以在这里展示的代码中使用的例子吗?

1 个回复
最合适的回答,由SO网友:Buttered_Toast 整理而成

我将从这里开始,永远不要将原始变量传递给sql查询!除非您对可变内容有100%的控制权,即使这样,我仍然不会原始传递它
始终use prepare().

现在根据你的需要你需要做这样的事情

<?php
$paged = (get_query_var( \'paged\')) ? get_query_var(\'paged\') : 1;

$posts = new WP_Query([
    \'post_type\'      => \'post\',
    \'posts_per_page\' => 1,
    \'post_status\'    => \'publish\',
    \'meta_key\'       => \'Mytitle\',
    \'meta_value\'     => $mytitle,
    \'meta_compare\'   => \'LIKE\',
    \'paged\'          => $paged
]);
?>

<ul>

<?php if ($posts->have_posts()) : while ($posts->have_posts()) : $posts->the_post(); ?>
<li><?php the_title(); ?></li>
<?php
endwhile; endif;

wp_reset_postdata();
?>

</ul>

<div class="pagination">
    <?php 
        echo paginate_links([
            \'base\'         => str_replace(999999999, \'%#%\', esc_url(get_pagenum_link(999999999))),
            \'total\'        => $posts->max_num_pages,
            \'current\'      => max( 1, get_query_var(\'paged\')),
            \'format\'       => \'?paged=%#%\',
            \'show_all\'     => false,
            \'type\'         => \'plain\',
            \'end_size\'     => 2,
            \'mid_size\'     => 1,
            \'prev_next\'    => true,
            \'prev_text\'    => sprintf(\'<i></i> %1$s\', __(\'Newer Posts\', \'text-domain\')),
            \'next_text\'    => sprintf(\'%1$s <i></i>\', __(\'Older Posts\', \'text-domain\')),
            \'add_args\'     => false,
            \'add_fragment\' => \'\',
        ]);
    ?>
</div>
这是一个非常原始的示例,因此您需要根据需要进行更改。

提供一些资源,以便更好地了解每件事的工作原理。

  1. WP_Query class
  2. Looping WP_Query
  3. Pagination with WP_Query WPSE
  4. Wordpress pagination codex