0

私の問題は多くのことをまとめたものであり、それが私がそれをうまく機能させることができない理由である可能性が最も高い.

私は長い SQL クエリに精通しておらず、Wordpress の大ファンでもありませんが、特定のページの順序を修正するように求められました。それを実現するには、カスタム属性で順序付けする必要があります。

私はこれを試しましたが、うまくいきませんでした:

$query = array(
    'post_type' => 'custom_post_type',
    'meta_key' => 'key_for_meta',

    'orderby' => 'STR_TO_DATE(meta_value, "%d/%m/%Y")',
    'order' => 'DESC',
    'first_taxonomy' => $first_taxonomy,
    'second_taxonomy' => $second_taxonomy
);

それは理想的な解決策であり、誰かがこれを機能させる方法を知っているなら、私は知りたい.

私はすでに のkey_for_meta代わりに をmeta_value試しorderby、正しい table.column などを指そうとしました。

何度も試行した後、すべての希望を失い、クエリを作成しようとしています。次のようになります。

SELECT p.*,
m.meta_key, m.meta_value, 
tt.taxonomy as s_tax,
t.slug
FROM wp_posts AS p
INNER JOIN wp_postmeta AS m ON p.ID = m.post_id AND m.meta_key = 'key_for_meta'
INNER JOIN wp_term_relationships AS tr ON p.ID=tr.object_id
**INNER JOIN wp_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms AS t ON tt.term_id = t.term_id**

WHERE 1 = 1
    AND wp_posts.post_type = 'custom_post_type'
    AND wp_posts.post_status = 'publish'

    **AND t.slug = '$first_taxonomy'
    AND t.slug = '$second_taxonomy'**

GROUP BY wp_posts.ID
ORDER BY STR_TO_DATE(m.meta_value, '%d/%m/%Y') ASC";

どんな解決策でも大歓迎です。問題がどのように解決されたかは気にしません。問題なく動作することを望んでいます。見栄えも良ければ完璧ですが、諦めました。

日付は DD/MM/YYYY の形式です。リクエストに応じて、wp_postmeta のいくつかの列:

meta_id    post_id    meta_key    meta_value
5101       3521       data_prova  12/01/2013
5114       3526       data_prova  02/03/2013
5165       3554       data_prova  02/03/2013

また、作成したクエリで分類法を機能させることはまだできませんでした。

すばらしいニュース: ほとんどすべてが機能しました。唯一の問題は、両方の分類法で機能させることができないことですが、1つだけで試しても機能します。

4

1 に答える 1

0

だから、同じ問題を抱えている人のために:

SQL だけではどうすればいいのかわからなかったので、WordPress の を使用してタクソノミーをテストしましたhas_term()。私の解決策は次のとおりです。

SELECT DISTINCT p.*, 
m.meta_key, m.meta_value, 
tt.taxonomy, tt.term_id,
t.slug
FROM wp_posts AS p
INNER JOIN wp_postmeta AS m 
    ON p.ID = m.post_id 
    AND m.meta_key = 'key_for_meta'
INNER JOIN wp_term_relationships AS tr 
    ON p.ID = tr.object_id
INNER JOIN wp_term_taxonomy AS tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms AS t 
    ON tt.term_id = t.term_id
WHERE 1 = 1
    AND p.post_type = 'custom_post_type'
    AND p.post_status = 'publish'
    AND (
    t.slug = '$first_taxonomy'
    )
ORDER BY STR_TO_DATE(m.meta_value, '%d/%m/%Y') ASC

さらに、ループを開始して実行するためのこの PHP:

$posts = $wpdb->get_results($queryRaw);

if ($wpdb->num_rows > 0) {

foreach ($posts as $post) {
    $stored_post = clone $GLOBALS['post'];
    $GLOBALS['post'] = $post;

    setup_postdata($post);
    if (has_term( $first_taxonomy, 'first_taxonomy', $post->ID) && has_term( $second_taxonomy, 'second_taxonomy', $post->ID)) {
    ...

あとはいつも通りです。global を設定しているので、すべてのメソッドが機能し$postます。

他の人が貢献できるように、質問を開いたままにしておきます。これに対処する方法についてもっと多くのアイデアを見てうれしいです。純粋なWordpressまたは少なくとも純粋なSQLソリューションが本当に欲しかったです(テストに関しては、 PHPを使用する必要がありました)。

于 2013-01-08T20:47:26.853 に答える