2012-06-17 23 views
21

Zajmuję się wtyczką wordpress. Używam dwóch różnych niestandardowych typów wpisów, graczy i zespołów.Wordpress - pobierz wpis na podstawie zawartości pola meta

  • Gracze ma odpowiednich pól meta: imię, nazwisko i zespołu.
  • Zespoły mają odpowiednie pola meta nazwy drużyny.

Podczas edytowania konkretnego zespół post, staram się mieć tablicę wszystkich graczy, które obecnie mają że zespołu nazwa delegowanym na ich meta pola dla nazwy zespołu. Nie jestem pewien, jak to zrobić. Każda pomoc lub artykuł byłby naprawdę pomocny. Dzięki

Odpowiedz

22

Ważne jest, aby pytać o posty przy użyciu co najmniej trzech kryteriów typu wpisu, klucza meta i wartości meta.

Na przykład, załóżmy, niestandardowej słupek typ jest nazywany po prostu „gracz”, a każdy „gracz” post ma meta pole dołączony nazwie „player_team”

Następnie można zapytać o te stanowiska za pomocą czegoś takiego :

$teamname = ""; // the player's team that you're querying for 

$myquery = new WP_Query("post_type=player&meta_key=player_team&meta_value=$teamname&order=ASC"); 
+2

Ponieważ jest to zapytanie wtórny wewnątrz strony zespołu, zaleca się użycie 'WP_Query' lub' get_posts' zamiast 'query_posts' - patrz [Codex] (http: // Codex. wordpress.org/Template_Tags/query_posts#Secondary_Loops) – Hobo

+3

Zaktualizowana odpowiedź odzwierciedlająca ten –

+1

+1. Niezła, dzięki. Przy okazji (przepraszam, wcześniej tego nie zauważyłem) - prawdopodobnie warto dodać parametr 'posts_per_page' równy -1, aby upewnić się, że wszyscy gracze są z powrotem (lub zauważają to, tak więc pytający jest świadomy możliwości) . – Hobo

44

lub używając get_posts:

$args = array(
    'meta_key' => 'player_team', 
    'meta_value' => $teamname, 
    'post_type' => 'player', 
    'post_status' => 'any', 
    'posts_per_page' => -1 
); 
$posts = get_posts($args); 

Innym odpowiednik kwerendy przy użyciu meta_query zamiast meta_key i meta_value:

$args = array(
    'meta_query' => array(
     array(
      'key' => 'player_team', 
      'value' => $teamname 
     ) 
    ), 
    'post_type' => 'player', 
    'posts_per_page' => -1 
); 
$posts = get_posts($args); 
+7

Jeśli ustawisz ''posts_per_page' => -1', która będzie pobierać wszystkie pasujące posty, nie ma potrzeby' 999999'. – cfx

+7

lub ustaw 'nopaging => true'. –

+1

@vortexs Dzięki za sugestię "post_status"! – colllin

Powiązane problemy