Изменение функции поиска для исключения сообщений и ограничения результатов до 10 на страницу только во внешнем интерфейсе

#php #wordpress

#php #wordpress

Вопрос:

Эта проблема состоит из двух частей. У меня есть решение исключить сообщения из поиска и ограничить результаты до 10 результатов на страницу, но проблема в том, что это также влияет на внутреннюю область wp-admin. Поэтому, если я буду искать сообщения через область wp-admin, сообщения будут исключены, хотя я хочу, чтобы это происходило только для пользователей, которые не являются администраторами. Это код, который у меня есть для исключения сообщений и ограничения результатов до 10:

 function SearchFilter($query) {
    if ($query->is_search) {
        $query->set('post_type', 'page');
    }
    return $query;
}
add_filter('pre_get_posts','SearchFilter');

function change_wp_search_size($query) {
    if ( $query->is_search ) // Make sure it is a search page
        $query->query_vars['posts_per_page'] = 10;

    return $query;
}
add_filter('pre_get_posts', 'change_wp_search_size');
  

Теперь я немного прочитал и изучил stack и другие сайты, и, похоже, есть способ запускать эти функции только после проверки, авторизован ли администратор. Я буду ссылаться на wordpress codex для функции is_admin

Таким образом я попытался использовать функцию is_admin, которая вызвала ошибку http 500. Пожалуйста, извините меня, если код грубо неверен:

 if ( !is_admin() ) {
function SearchFilter($query) {
if ($query->is_search amp;amp; !is_admin() ) {
$query->set('post_type', 'page');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');
if ( !is_admin() ) {
function change_wp_search_size($query) {
if ( $query->is_search amp;amp; !is_admin() )
$query->query_vars['posts_per_page'] = 10;
return $query;
}
add_filter('pre_get_posts', 'change_wp_search_size');
  

Я надеюсь, что я близок и просто нуждаюсь в некоторой настройке кода

Редактировать: Итак, теперь это то, что у меня есть для обеих функций. Я знаю, что это мой php-код, в котором проблема, можете ли вы помочь дальше, пожалуйста:

 function SearchFilter($query) {
if ( is_admin () ) {
return $query;
}
else {
($query->is_search) {
$query->set('post_type', 'page');
}
return $query;
}
add_filter('pre_get_posts','SearchFilter');

function change_wp_search_size($query) {
if ( is_admin () ) {
return $query;
}
if ( $query->is_search ) // Make sure it is a search page
$query->query_vars['posts_per_page'] = 10;

return $query;
}
add_filter('pre_get_posts', 'change_wp_search_size');
  

РЕДАКТИРОВАТЬ 2: Pastebin всего function.php файл http://pastebin.com/tTEnHGp2

Комментарии:

1. Чтобы выяснить причину ошибки, установите define('WP_DEBUG', true); в свой wp-config.php . Это покажет вам ошибку, но используйте это только в том случае, если вы используете локальный сервер или сервер разработки. Смотрите также: codex.wordpress.org/Debugging_in_WordPress

Ответ №1:

 function SearchFilter($query) {
    if ($query->is_search amp;amp; !is_admin() ) {
        $query->set('post_type', 'page');
    }


    return $query;
}

add_filter('pre_get_posts','SearchFilter');

function change_wp_search_size($query) {
    if ( $query->is_search amp;amp; !is_admin() ) {
        $query->query_vars['posts_per_page'] = 10;
    }

    return $query;
}

add_filter('pre_get_posts', 'change_wp_search_size');
  

Это должно сделать это

Комментарии:

1. Я добавляю этот код в нижнюю часть моего functions.php файл, и он по-прежнему показывает ошибку http 500 при попытке загрузить веб-сайт. Я скопировал и вставил его. Я вижу, что я не использовал if при поиске по запросу, который вы действительно включили в свой фрагмент, но он все равно выдает ошибку. Если вы посмотрите на это еще раз и внесете какие-либо предложения, я был бы признателен.

2. @d.ariel Я обновил код, пожалуйста, проверьте его и добавьте некоторые исправления ошибок и проверки там, где я оставил комментарий.

3. Я скопировал ваш обновленный код, но он все равно выдал ошибку 500. Не уверен, как выполнить перехват ошибок, когда вы прокомментировали код.

4. Поскольку я не вижу ваш полный файл функции, я не могу сказать, что не так, но просто проверьте, хотя мой предварительный вариант и измените на то, что вы хотите.

5. Я отредактировал вопрос, чтобы включить весь файл. Я использую тему 2016 года по умолчанию для WordPress, и я добавил pastebin со всей functions.php досье. pastebin.com/tTEnHGp2

Ответ №2:

Хорошо, не оборачивайте свои функции поиска вокруг is_admin() вместо этого поместите is_admin() внутри функции

Вот так:

 Function search(){
    if ( is_admin()){
        //Search query for admin
    }
   else {
       //Search query for users
   }
}
  

Это должно сделать это

Комментарии:

1. Я обновил свой вопрос. Я знаю, что в моем php-коде есть синтаксическая ошибка, и я пытался следовать вашему предложению как мог. Можете ли вы помочь с исправлением ошибок?