Состояние работает отдельно, но не как ИЛИ

У меня есть два условных утверждения, которые следующие:

if( isset( $query_string['page'] ) && strpos($_SERVER['REQUEST_URI'], '/blog/') !== false && strpos($_SERVER['REQUEST_URI'], '/blog/page/') === false ) {

if( $query->is_main_query() && !$query->is_feed() && !is_admin() && strpos($_SERVER['REQUEST_URI'], '/blog/') !== false && strpos($_SERVER['REQUEST_URI'], '/blog/page/') === false ) {

Последнее условие в обоих операторах if:

strpos($_SERVER['REQUEST_URI'], '/blog/page/') === false

Я хотел бы изменить последнее условие для обоих, которое будет на простом английском языке:

Если все критерии совпадают и URL содержит ‘/ Блог / страница /’ или же ‘/ Блог / теги /’ сделай что-нибудь.

Когда я меняю последнее условие из ‘/ Блог / страница /’ в ‘/ Блог / теги /’ код работает. Как только я пытаюсь использовать оба одновременно, код больше не работает.

Я пытался изменить && в and и использовать || для условия или, чтобы сохранить правильный приоритет. Я попытался поместить их в скобки, чтобы справиться с приоритетом, ни один из них не сработал.

Я даже попробовал:

strpos($_SERVER['REQUEST_URI'], '/blog/page/') || strpos($_SERVER['REQUEST_URI'], '/blog/tag/') === false

Что тоже не помогло.

0

Решение

<?php

// Your code says "=== false" (doesn't match)
// but your English description says "contains either '/blog/page/' or '/blog/tag/'" (match)
// This assumes you want what your English description says/**
* Returns a boolean indicating if the given URI part is found
*/
function match($uriPart)
{
return strpos($_SERVER['REQUEST_URI'], $uriPart) !== false;
}

/**
* Returns a boolean indicating if the given URI part is not found
*/
function doesNotMatch($uriPart)
{
return strpos($_SERVER['REQUEST_URI'], $uriPart) === false;
}

// In this case, "match('/blog/')" is redundant because you're checking for other strings which contain it.
// Nevertheless, I'm leaving it as-is.
if( isset( $query_string['page'] ) && match('/blog/') && (match('/blog/page/') || match('/blog/tag/'))) {
...

// In this case, "match('/blog/')" is redundant because you're checking for other strings which contain it.
// Nevertheless, I'm leaving it as-is.
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && match('/blog/') && (match('/blog/page/') || match('/blog/tag/'))) {
...
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector