#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-коде есть синтаксическая ошибка, и я пытался следовать вашему предложению как мог. Можете ли вы помочь с исправлением ошибок?