Intereting Posts
Многостраничные сообщения: Подкаталог для каждого сообщения? Пусть вошедшие в систему пользователи используют радиокнопки (да и нет), чтобы исключить их профиль автора из списка пользователей Сообщения не отображаются в определенной категории Отображение содержимого одного пользовательского типа сообщения на одном столбце другого пользовательского типа сообщения Установите максимальную длину заголовка – аналогично длине выдержки за пределами single.php Общее количество авторов с несколькими сообщениями Как ограничить 1 изображение за сообщение только на домашней странице? Как реализована блокировка WP Cron? Engadget Как и большинство прокомментированных плагинов wpdb обновить несколько строк? Как может возникнуть или измениться .htaccess с аутентификацией? Маскировка wp-content / themes / name / images в каталог изображений с использованием htaccess Выберите столбец боковых панелей на странице widgets.php Минималистическая тема для администратора WP 3 Вставить сообщение в другую базу данных

Как отображать будущие сообщения – измененный запрос все еще дает 404

У меня очень странная проблема, и я застрял. Я хочу, чтобы на одной странице отображались сообщения с post_status из публикации и будущего. Поэтому я добавил этот код к своим функциям.php в моей теме:

function display_future_posts() { global $wp_query; if( !is_admin() && $wp_query->is_main_query() && $wp_query->is_single()) { $wp_query->set( 'post_status', array('future', 'publish', 'draft') ); } } add_action('pre_get_posts', 'display_future_posts'); 

Это успешно изменяет запрос. Но я все еще вижу страницу 404, когда я не зарегистрирован как администратор. Поэтому я проследил db-запросы. Вот что я нашел при вызове print_r ($ wpdb-> query); :

 [16] => Array ( [0] => SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( ( YEAR( post_date ) = 2014 AND MONTH( post_date ) = 9 ) ) AND wp_posts.post_name = 'my-life' AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future') ORDER BY wp_posts.post_date DESC [1] => 0.000303030014038 [2] => require('wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts ) [17] => Array ( [0] => SELECT post_id FROM wp_postmeta, wp_posts WHERE ID = post_id AND post_type = 'post' AND meta_key = '_wp_old_slug' AND meta_value = 'my-life' AND YEAR(post_date) = 2014 AND MONTH(post_date) = 9 [1] => 0.000878095626831 [2] => require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), call_user_func_array, wp_old_slug_redirect ) [18] => Array ( [0] => SELECT ID FROM wp_posts WHERE post_name LIKE 'my-life%' AND post_type IN ('post', 'page', 'attachment') AND YEAR(post_date) = 2014 AND MONTH(post_date) = 9 AND post_status = 'publish' [1] => 0.00031304359436 [2] => require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), call_user_func_array, redirect_canonical, redirect_guess_404_permalink ) 

Таким образом, мой запрос выполняется, но затем вызывается функция wp_old_slug_redirect () в wp-include / query.php и там функция is_404 () возвращает true. Таким образом, WordPress пытается найти старый слизень (который, конечно, не существует), терпит неудачу, а затем перенаправляет на 404.

Когда я вызываю print_r ($ wp_query); в header.php моей темы кажется, что запрос был успешно изменен, но странно не возвращает никаких результатов. По крайней мере, [сообщения] пуст. Когда я запускаю [запрос] прямо на моем сервере MySQL, я получаю именно тот результат, который я ищу.

 WP_Query Object ( [query] => Array ( [page] => [year] => 2014 [monthnum] => 09 [name] => my-life ) [query_vars] => Array ( [page] => 0 [year] => 2014 [monthnum] => 9 [name] => my-life [error] => [m] => [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [day] => 0 [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [menu_order] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [post_parent__in] => Array ( ) [post_parent__not_in] => Array ( ) [author__in] => Array ( ) [author__not_in] => Array ( ) [meta_query] => Array ( ) [post_status] => Array ( [0] => future [1] => publish ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 7 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC ) [tax_query] => [meta_query] => WP_Meta_Query Object ( [queries] => Array ( ) [relation] => ) [date_query] => [request] => SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( ( YEAR( post_date ) = 2014 AND MONTH( post_date ) = 9 ) ) AND wp_posts.post_name = 'my-life' AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future') ORDER BY wp_posts.post_date DESC [posts] => Array ( ) [post_count] => 0 [current_post] => -1 [in_the_loop] => [comment_count] => 0 [current_comment] => -1 [found_posts] => 1 [max_num_pages] => 0 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => [is_404] => 1 [is_comments_popup] => [is_paged] => [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_posts_page] => [is_post_type_archive] => [query_vars_hash] => 7ce0208af83c782976286abc2d021484 [query_vars_changed] => 1 [thumbnails_cached] => [stopwords:WP_Query:private] => ) 

Я из ума. Что я делаю не так? Что мне не хватает.

Надеюсь, этот вопрос не слишком конкретный, и он полезен для кого-то другого.

Благодаря! Ole

Вы наступаете на мой запрос. Легко предположить, что:

  1. Вы можете изменить запрос.
  2. Параметры хорошо определены.
  3. Таким образом, путем изменения параметров вы можете добиться желаемых результатов.

На самом деле существует множество параметров запроса, затрагивающих, что приводит к ужасным тупикам. WordPress спроектирован для запросов и показа сообщений, которые являются общедоступными. Любые попытки обойти это приходят с серьезным горем.

В вашем конкретном случае это то, что выглядит сгенерированный SQL-запрос (для черновика сообщения):

 SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_name = 'draft' AND wp_posts.post_type = 'post' AND (( wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future' OR wp_posts.post_status = 'draft' )) ORDER BY wp_posts.post_date DESC 

Выглядит отлично, не так ли? Ну, кроме того, что сообщение под заголовком «Черновик» не имеет поля post_name установленного на что угодно .

Это не «пост – это всегда пост». Это «сообщения будут выглядеть по-разному и полны крайних случаев».

Всякий раз, когда вам нужна более сложная концепция, такая как «будущая» почта, не доверяйте ядру WP, чтобы это сделать . У него будет сердечный смех, а затем разориться в следующие три дня вашей жизни.

  1. Реализовать сложные данные как настраиваемые данные полей.
  2. Запросите его соответствующим образом.

Это не позволит мне прокомментировать, потому что я еще недостаточно крут.

Вы рассматривали использование WP_Query WordPress для изменения цикла вместо создания функции?

 $new_query = WP_Query( 'post-status' => array ( 'future', 'publish', 'draft', ), ); if ( $new_query->have_posts() ) : while ($new_query->have_posts() ) : the_post(); ?> <h1><?php echo the_title(); ?></h1> <?php endwhile; endif; 

Если вам нужно только на определенной странице, вы всегда можете создать имя страницы [имя шаблона] .php, а затем content- [template-name] .php, чтобы позвонить ему.

Дайте мне знать, если вы собираетесь поступить иначе, но если вы просто пытаетесь отобразить на странице другой тип пост-статуса, я бы изменил цикл.