Ben*_*n L 5 sorting wordpress alphabetical
我按标题按字母顺序对帖子进行排序,如下所示:
<?php
{
$posts = get_posts($query_string .
'&orderby=title&order=asc&posts_per_page=-1');
}
get_template_part( 'loop', 'category' );
?>
Run Code Online (Sandbox Code Playgroud)
我想从排序中排除诸如"the","a"和"an"之类的文章.
实现这一目标的最佳方法是什么?
谢谢!
我不知道有什么简单的方法可以做到这一点,但你可以这样做,
为了实现这一点,您需要向帖子添加自定义元字段。将其命名为 mytitle(例如)。
对于您添加的新帖子,很简单,您必须在添加帖子页面的 mytitle 自定义字段中添加修改后的标题(从标题中删除 a、an、the)。
对于旧帖子来说有点棘手,你必须编写一段 php 代码来检索帖子的标题,使用 php preg_replace 从其中删除“a”、“an”、“the”并将其添加到 WordPress 的 postmeta 表中数据库使用类似这样的东西:
<?php //inside loop
$query=INSERT INTO xyz_postmeta (post_id, meta_key, meta_value) VALUES ($postid, 'mytitle' $title);
$wpdb->query('$query'); ?>
Run Code Online (Sandbox Code Playgroud)
其中 $postid 是循环内的帖子 ID,$title 是修改后的标题。
现在您已经使用自定义 mytitle 字段更新了之前的所有帖子。
现在要显示,您必须使用自定义循环(不是主题中包含的循环)。
以下是如何创建一个基本的自定义循环来显示按 mytitle 顺序排序的帖子。
$querystr = "
SELECT wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.ID = wpostmeta.post_id
AND wpostmeta.meta_key = 'mytitle'
AND wposts.post_type = 'post'
AND wposts.post_status = 'publish'
ORDER BY wpostmeta.meta_value ASC
";
Run Code Online (Sandbox Code Playgroud)
现在您可以通过任何您想要的方式执行查询。Wordpres 提供了多种方法来执行此操作。这是一个链接
例如你可以做这样的事情
$pageposts = $wpdb->get_results($querystr, OBJECT);
foreach ( $pageposts as $pagepost )
{
echo $pagepost->post_title;
//do other stuff to display content, meta etc..
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |