Я работаю над веб-сайтом WordPress, на котором я контролирую содержимое домашней страницы с помощью следующего кода:
Код А:
$special_reports = new \WP_Query( [
'post_type' => 'current-special-report',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => 4,
]);
С помощью приведенного выше кода на главной странице отображаются 4 сообщения.
В некоторых условиях я хочу, чтобы он отображался 2. Когда if ($data->{"toggle_status"}==3), я хочу, чтобы posts_per_page было 2. Для этого я использую следующую логику:
Код Б:
if ($data->{"toggle_status"}==3) {
$special_reports = new \WP_Query( [
'post_type' => 'current-special-report',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => 2,
]);
}
Постановка задачи:
Мне интересно, есть ли способ объединить код A и код B с логикой ($data->{"toggle_status"}==3).






просто используйте тернарный оператор
$special_reports = new \WP_Query([
'post_type' => 'current-special-report',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => $data->{"toggle_status"} == 3 ? 2 : 4,
]);
Просто определите массив, а затем добавьте или измените массив:
$array = [
'post_type' => 'current-special-report',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => 4];
if ($data->toggle_status == 3) {
$array['posts_per_page'] = 2;
}
$special_reports = new \WP_Query($array);
Есть несколько способов, но вы поняли идею. Вы также можете использовать switch или, если вы всегда хотите показывать на единицу меньше, тогда:
$array['posts_per_page'] = $data->toggle_status - 1;
Просто создайте переменную, которую вы установите на основе вашего состояния.
$posts_per_page = 4; //default is set to 4
if ($data->toggle_status === 3) {
$posts_per_page = 2; //set to 2 if condition is met
}
$special_reports = new \WP_Query( [
'post_type' => 'current-special-report',
'orderby' => 'menu_order',
'order' => 'ASC',
'posts_per_page' => $posts_per_page,
]);
Это имеет дополнительное преимущество, заключающееся в возможности легко добавить дополнительные условия позже, чтобы изменить значение в конце.
Примечание. Если $data->toggle_status возвращает строку, ваш оператор if здесь может немного измениться, он будет выглядеть так:
$data->toggle_status === "3"$data->toggle_status == 3Надеюсь toggle_status это не строка ;-)
@AbraCadaver Из кода OP я не понимаю, почему они использовали сложный синтаксис, по сути, он вызывал бы его так же, как в моем коде, верно?
Я имел в виду, если $data->toggle_status = '3' :-) Тогда === ного.
@AbraCadaver Да, я знаю, я обновил свой ответ, чтобы решить эту проблему. Я просто пытался подтвердить другое для собственного здравомыслия :)
Да легко
$param = [
'post_type' => 'current-special-report',
'orderby' => 'menu_order',
'order' => 'ASC'
];
if ($data->{"toggle_status"}==3) {
$param[ 'posts_per_page' ] = 3;
} else {
$param[ 'posts_per_page' ] = 4;
}
$special_reports = new \WP_Query( $param );
Было бы неплохо сослаться на тройная документация, потому что начинающим программистам иногда трудно понять концепцию.