Вопрос по wordpress-plugin, wordpress, php – Wordpress - получать посты на основе содержимого метаполя

24

Я разрабатываю плагин для WordPress. Я использую два различных пользовательских типа сообщений,players а такжеteams.

Players has relevant meta fields: First name, last name, and team. Teams has relevant meta fields of team name.

При редактировании конкретногоteam пост, я пытаюсь получить массив всехplayers что в настоящее время есть чтоteam's имя размещено в их метаполе для названия команды. Я не уверен, как это сделать. Любая помощь или статьи будут действительно полезны. Спасибо

Ваш Ответ

2   ответа
53

Или используя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);

Еще один эквивалентный запрос с использованиемmeta_query вместоmeta_key а такжеmeta_value:

$args = array(
    'meta_query' => array(
        array(
            'key' => 'player_team',
            'value' => $teamname
        )
    ),
    'post_type' => 'player',
    'posts_per_page' => -1
);
$posts = get_posts($args);
или установитьnopaging => true.
Если вы установите'posts_per_page' => -1 который будет получать все соответствующие сообщения, нет необходимости для999999.
@cfx Если вы знаете, что сообщений будет мало, вам не о чем беспокоиться. Например: члены команды в малом бизнесе. Он никогда не вернет сотни результатов: P
@vortexs Спасибо за & quot; post_status & apos; предложение!
23

Важно то, что вы запрашиваете сообщения, используя как минимум три критерия: тип сообщения, мета-ключ и мета-значение.

Например, давайте предположим, что ваш пользовательский тип записи просто называется «игрок» И каждый «игрок» к сообщению прикреплено мета-поле, называемое «player_team»

Затем вы можете запросить эти сообщения, используя что-то вроде этого:

$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" );
Спасибо!! Это очень помогает. Я пытался сделать это с помощью & quot; get_posts & quot; но, похоже, параметры не могут быть правильными. dremme
Кроме того, мой CPT только что был назван "игрок" не "игроки". Ваше решение работает отлично. dremme
+1. Хороший, спасибо. Кстати (извините, я не заметил этого раньше) - вероятно, стоит добавитьposts_per_page параметр -1, чтобы гарантировать, что вы вернете всех игроков (или отметите это, во всяком случае, так что спрашивающий знает об этой возможности).
Обновленный ответ, чтобы отразить это
Поскольку это дополнительный запрос внутри страницы команды, рекомендуется использоватьWP_Query или жеget_posts вместоquery_posts - увидетьthe Codex

Похожие вопросы