如何根据meta_value和title更改显示的帖子的顺序?

时间:2011-02-04 15:31:21

标签: wordpress

我的网站是关于诗歌的。

我为每首诗使用自定义字段,其中元键为“作者”,元值为作者姓名,例如: “艾莉森,詹姆斯”。

现在我希望我的帖子按照一定顺序出现在循环中:按照上面提到的元数值按字母顺序排列(例如,所有诗歌都是“Allison,James”;然后是所有诗歌“Barnes,John”然后所有诗歌由“卡特,苏”等等。

一位特定作者(=元值)的诗歌应按字母顺序按名称排序(例如Allison,James:“After dark”,“Before sunset”等等)。有没有办法做到这一点?我在下面找到了字符串,但它不起作用(也许我把它放在错误的地方或者我必须在其他地方添加一些代码以使其工作)。

你知道我必须在哪个代码中放入哪个php文件才能获得所需的效果?

<?php
 $querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id 
    AND wpostmeta.meta_key = 'Autor' 
    AND wposts.post_type = 'post' 
    ORDER BY wpostmeta.meta_value ASC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);

 ?>


非常感谢!干杯,菲利克斯

2 个答案:

答案 0 :(得分:0)

怎么样:

SELECT DISTINCT $ wpdb-&gt; posts。*,meta_value AS author 来自$ wpdb-&gt;帖子 LEFT JOIN $ wpdb-&gt; postmeta ON $ wpdb-&gt; postmeta.post_id = $ wpdb-&gt; posts.ID 在哪里1 = 1 AND post_status ='发布' AND post_type ='post' AND meta_key ='Autor' ND post_password ='' ORDER BY作者DESC;

答案 1 :(得分:0)

我终于找到了解决方案:o)使用Ambrosite插件,我将以下代码片段添加到我的single.php中:

<?php
    previous_post_link_plus( array(
       'loop' => true,
       'link' => '«',
       'format' => '%link',
       'order_by' => 'custom',
       'order_2nd' => 'post_title',
       'meta_key' => 'Autor',
       'order'=>'ASC',
       'in_same_cat' => true
    ) );
?>

<?php
    next_post_link_plus( array(
        'loop' => true,
        'link' => '»',
        'format' => '%link',
        'order_by' => 'custom',
        'order_2nd' => 'post_title',
        'meta_key' => 'Autor',
        'order'=>'ASC',
        'in_same_cat' => true
    ) );
?>

效果很好!无论如何,谢谢Felix