Как объединить два php-кода с некоторым условием?

Я работаю над веб-сайтом 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).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
48
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

просто используйте тернарный оператор

$special_reports = new \WP_Query([
    'post_type' => 'current-special-report',
    'orderby'   => 'menu_order',
    'order'     => 'ASC',
    'posts_per_page' => $data->{"toggle_status"} == 3 ? 2 : 4,
]);

Было бы неплохо сослаться на тройная документация, потому что начинающим программистам иногда трудно понять концепцию.

GrumpyCrouton 28.02.2019 20:44

Просто определите массив, а затем добавьте или измените массив:

$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 28.02.2019 20:48

@AbraCadaver Из кода OP я не понимаю, почему они использовали сложный синтаксис, по сути, он вызывал бы его так же, как в моем коде, верно?

GrumpyCrouton 28.02.2019 20:49

Я имел в виду, если $data->toggle_status = '3' :-) Тогда === ного.

AbraCadaver 28.02.2019 20:52

@AbraCadaver Да, я знаю, я обновил свой ответ, чтобы решить эту проблему. Я просто пытался подтвердить другое для собственного здравомыслия :)

GrumpyCrouton 28.02.2019 20:53

Да легко

$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 );

Другие вопросы по теме