5

次のように、投稿をタイトルのアルファベット順に並べ替えています。

   <?php
      {
       $posts = get_posts($query_string . 
        '&orderby=title&order=asc&posts_per_page=-1');
      } 
      get_template_part( 'loop', 'category' );
    ?>

「the」、「a」、「an」などの冠詞をソートから除外したいと思います。

これを達成するための最良の方法は何ですか?

ありがとう!

4

1 に答える 1

1

それを行う簡単な方法はわかりませんが、これを行うことができます。

これを実現するには、投稿にカスタム メタ フィールドを追加する必要があります。mytitle という名前を付けます (たとえば)。

追加する新しい投稿の場合は簡単です。投稿の追加ページの mytitle カスタム フィールドに、変更したタイトル (タイトルから a、an、を削除) を追加する必要があります。

古い投稿の場合、少し注意が必要です。投稿のタイトルを取得するには、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'); ?> 

$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
   ";

これで、任意の方法でクエリを実行できます。Wordpres には、そのためのさまざまな方法が用意されています。ここにリンクがあります

たとえば、次のようなことができます

$pageposts = $wpdb->get_results($querystr, OBJECT);
foreach ( $pageposts as $pagepost ) 
{
    echo $pagepost->post_title;
    //do other stuff to display content, meta etc..
}
于 2011-12-23T13:27:27.453 に答える