2010-03-28 8 views
0

J'essaie de modifier une fonction wordpress/MySQL pour afficher un peu plus d'informations. Je suis actuellement en cours d'exécution de la requête suivante qui sélectionne le poste, rejoint le « postmeta » et obtient l'information où le meta_key = _likedWordpress SQL Sélectionnez plusieurs méta-valeurs/méta-clés/champs personnalisés

function most_liked_posts($numberOf, $before, $after, $show_count) { 
global $wpdb; 

    $request = "SELECT ID, post_title, meta_value FROM $wpdb->posts, $wpdb->postmeta"; 
    $request .= " WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id"; 
    $request .= " AND post_status='publish' AND post_type='post' AND meta_key='_liked' "; 
    $request .= " ORDER BY $wpdb->postmeta.meta_value+0 DESC LIMIT $numberOf"; 
    $posts = $wpdb->get_results($request); 

    foreach ($posts as $post) { 
    $post_title = stripslashes($post->post_title); 
    $permalink = get_permalink($post->ID); 
    $post_count = $post->meta_value; 

    echo $before.'<a href="' . $permalink . '" title="' . $post_title.'" rel="nofollow">' . $post_title . '</a>'; 
    echo $show_count == '1' ? ' ('.$post_count.')' : ''; 
    echo $after; 
    } 
} 

L'important étant: $post_count = $post->meta_value;

Mais maintenant, je veux aussi saisir une valeur qui est attaché à chaque poste appelé wbphoto

Comment puis-je préciser que $ POST_COUNT = _liked et $ photo = wbphoto

?

Voici un chapeau d'écran de mon Phpmyadmin alt text http://i44.tinypic.com/ioisuv.png

Répondre

1

Le SQL sera très laid.

// Your Meta key names 
    $metas = array(
     '_liked', '_another1' 
    ); 

    foreach ($metas as $i=>$meta_key) { 
     $meta_fields[] = 'm' . $i . '.meta_value as ' . $meta_key; 
     $meta_joins[] = ' left join ' . $wpdb->postmeta . ' as m' . $i . ' on m' . $i . '.post_id=' . $wpdb->posts . '.ID and m' . $i . '.meta_key="' . $meta_key . '"'; 
    } 
    $request = "SELECT ID, post_title, " . join(',', $meta_fields) . " FROM $wpdb->posts "; 
    $request .= join(' ', $meta_joins); 
    $request .= " AND post_status='publish' AND post_type='post'"; 
    $request .= " LIMIT $numberOf"; 

Il vaudra mieux faire un autre SQL pour récupérer les méta eux-mêmes.

+0

Hmm merci. Comment pourrais-je faire écho à ces valeurs? – wesbos

+0

Je pense que je l'ai. Cela a fonctionné très bien. – wesbos

0

Je ne sais pas si cela peut vous aider, mais voici une requête SQl qui fonctionne et qui reçoit des messages et post_meta.

SELECT DISTINCT ID, p.post_title, p.post_status, p.post_date, m.meta_key, m.meta_value 
FROM wp_posts p, wp_postmeta m 
WHERE p.post_author = 2 
AND p.post_status = 'publish' 
AND p.post_date >= '2009-01-01' 
AND p.post_date <= '2010-05-28' 
AND p.ID = m.post_id 
0

Modifier requête comme suit:

$request = "SELECT ID, post_title, meta_value FROM $wpdb->posts p, $wpdb->postmeta pm, $wpdb->postmeta pm1"; 
    $request .= " WHERE p.ID = pm.post_id"; 
    $request .= " AND p.post_status='publish' AND p.post_type='post' AND pm.meta_key='_liked' AND pm1.meta_key='wbphoto'; 
    $request .= " ORDER BY pm.meta_value+0 DESC LIMIT $numberOf";