指定した文字で始まるすべての投稿を表示しますか?


11

私はWordpressベースの辞書を構築しようとしています、基本的には26ページになります(各文字に1つ):

ABC ... XYZ

そして、すべてのページには、指定された文字で始まるすべての投稿が表示されるので、「A」ページを開いた後、次のように表示されます。

驚いた

そろばん

あわび

(...)紺碧

最初はカスタム投稿タイプについて考えていましたが、26のカスタム投稿タイプを作成して維持することはやり過ぎのように思えます。

そのような投稿を並べ替える最も効率的な方法は何ですか?データベースクエリ、PHPでループを分割しますか?私は数千の投稿を目指しています(そう、それはWordpressでなければなりません:))。

回答:


10

投稿タイプは使用せず、分類用語を使用してください!

保存時に、投稿タイトルの最初の文字を使用して、AZ分類法でオブジェクト用語を設定します。一貫性を保つために、大文字または小文字を強制してください。アルファベットの各文字の用語を作成し、数字やその他の非英数字記号の用語を作成してください。

これは、各投稿のタイトルの最初の文字をクエリするよりも速く、タグクラウドや用語リスタウィジェットなど、より多くのことができる分類法を提供します。また、データベースに手動でカウントさせることなく、投稿に関連付けられている文字とその数を決定するはるかに高速な方法であり、標準のWordPress用語APIをそのまま使用して、母音で始まる投稿などのより複雑なクエリを実行できます


これは間違いなく理想的なルートです。ただし、何千もの投稿があることに注意してください。これはかなり面倒な作業になる可能性があります。最初に、アルファベットの各文字で始まるすべての投稿をクエリし、各投稿を適切な分類用語で更新して、それぞれのアルファベットの文字に一致させる必要があります。そうしないと、個々の投稿を手動で更新するのに数百年かかります。
Michael Ecklund、2012年

ええ、それは非常に大きな欠点です。これらの投稿は完全に無知な人々によって追加されるため、新しい投稿を作成するときに正しい分類法を設定することに関しては、それらを頼りにすることはできません。すべての投稿をクエリして、誰かが何かを編集または作成するたびにそれらを更新することが効率的かどうかはわかりませんか?
Wordpressor

3
いいえ、まったく問題ありません。UIを非表示にしてプロセスを自動化します。保存フックと更新フックで実行します。手動で実行すると、非常にコストがかかります
Tom J Nowell

Tom J Nowell、それは魅力のように機能しますが、私には1つの深刻な問題があり、これをどのように管理するかわかりません-一部の単語はen.wikipedia.org/wiki/Ąなどの文字で始まります-私はこれらの条件を設定できません。ここにいくつかのコードと説明があります:pastebin.com/cHxbjVFH、なぜそれが起こっているのですか?この言語専用のWPパックを使用しています。
Wordpressor 2012年

アクセントやウムラウトなどについて話していますか?もしそうなら、それはそれ自体で全く新しい質問に値するものであり、尋ねるのは簡単な質問ではありません。これは一般的なPHPの質問でもある可能性が高いため、Stack Overflowが質問に最適な場所です
Tom J Nowell

4

推奨される分類法の方法を使いたくない場合は、次のようにします。

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // could be any letter you want
         $results = $wpdb->get_results(
                "
                SELECT * FROM $wpdb->posts
                WHERE post_title LIKE '$request%'
                AND post_type = 'post'
                AND post_status = 'publish'; 
                "
         ); 
         if ( $results ) 
         {
            foreach ( $results as $post ) 
            {
                setup_postdata ( $post ); 
                ?> 
                <li>
                    ... loop stuff here (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">No clubs found for that letter. Please try again, or use the search at the top.</div>
            <?php
         }
         ?>
    </ul>

これがどのように機能するか説明できますか?手紙が含まれている投稿は返されませんか?
Tintinabulator Zea

そうではありません。mysqlはワイルドカードとして%を使用します。ただし、mysqlクエリで$に遭遇したことはありません。正しく読む必要がありますWHERE post_title LIKE 'request%'
ブレット

1

この記事をここで確認してください:タイトルによるquery_post?

または、PODS 2フレームワークを使用して事前保存ヘルパーを作成し、投稿タイトルの最初の文字をいくつかのフィールドに保存して、単純なWHERE条件を使用できます。

または、すべての文字を含むドロップダウン(別のポッド/コンテンツタイプ)を作成し、既存の投稿コンテンツタイプ(ポッド2では可能)との関係を作成します。そのため、辞書の用語を保存する前に、ドロップダウンボックスからこの用語に割り当てる文字を選択します。

ポッド2では、既存の投稿コンテンツタイプにフィールドを追加できます。Drupalの世界でのCCK +ビューのようなプラグイン/フレームワークは本当に素晴らしいです。

ポッド2は非常に役立つプラグインです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.