Intereting Posts
Запрос сообщений по широте и долготе для создания Google Maps с несколькими маркерами Как установить содержимое настраиваемого типа сообщений в виде раскрывающегося списка в меню навигации Как получить список типов сообщений, которые «поддерживают» различные вещи, такие как атрибуты страницы? Случайные сообщения из пула сообщений Если пользовательская таксономия еще условна Как показать пользовательские поля для всех пользователей по умолчанию при изменении после публикации Как использовать плагин HyperDB в существующем wpmu Отображение wp_list_bookmarks Текстовый редактор в заголовке WP Internet Explorer открывает ссылки на .msi-файлы как текст на новой вкладке Как проверить, находится ли пользователь в терминах таксономии на странице родителей, ребенка или внука? Как управлять выходом пользовательского типа сообщений без изменения темы? Проблема запуска разработки копии WordPress на WebMatrix? ОШИБКА: файлы cookie заблокированы из-за неожиданного вывода – нет доступа к FTP Как предотвратить планирование одного и того же мероприятия в тот же день

Запросить сообщения только с фактическим текстовым контентом (не включая короткий код или изображения)

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

Вот живой пример рабочей версии того, что я хочу, чтобы она выглядела.

Моя проблема в том, что у меня есть несколько сообщений, которые представляют собой только короткие коды (без реального контента) или просто изображение (без текста на странице).

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

$content = strip_shortcodes( get_post()->post_content ); if( '' !== $content ) 

Затем я попытался сделать выше шаг дальше, чтобы удалить сообщения, в которых было только изображение, а не текст. Ну вот так:

 $content = strip_shortcodes( get_post()->post_content ); $content = str_word_count( strip_tags( $content ) ); if( '' !== $content ) 

По-видимому, это не имело никакого эффекта. Посты все еще отображались так же, как и в предыдущем примере.

Любая помощь в том, что я делаю неправильно здесь или как мне следует это делать? Как я могу проверить, что сообщение имеет фактический контент, как в тексте / словах?

Вот мой полный код ниже:

 <?php $args = new WP_Query(array( 'posts_per_page' => 5, 'post__in' => get_option( 'sticky_posts') , 'meta_query' => array( array( 'key' => '_thumbnail_id', 'compare' => 'EXISTS', ), ), 'post_status' => 'publish', 'orderby' => 'post__in', 'post_type' => array( 'post' ), 'ignore_sticky_posts' => true, )); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); $content = strip_shortcodes( get_post()->post_content ); $content = str_word_count( strip_tags( $content ) ); if( '' !== $content && has_post_thumbnail() ): ?> <article class="thumbnail item" itemscope="" itemtype="http://schema.org/CreativeWork"> <a class="blog-thumb-img" href="<?php the_permalink(); ?>" title="Read more"> <?php the_post_thumbnail(); ?> </a> <div class="caption pt30"> <h4 itemprop="headline"> <a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a> </h4> <p itemprop="text" class="flex-text text-muted"><?php the_excerpt();?></p> </div> </article> <?php endif; } wp_reset_postdata(); } ?> 

Solutions Collecting From Web of "Запросить сообщения только с фактическим текстовым контентом (не включая короткий код или изображения)"

Вот несколько примечаний:

  • Существует проблема с тем, как определяется $args :

     $args = new WP_Query(array( ... ) ); $the_query = new WP_Query( $args ); 

    т.е. есть два экземпляра WP_Query но $args должен быть массивом.

  • Похоже, эта часть тоже проблематична:

     $content = str_word_count( strip_tags( $content ) ); if( '' !== $content ) 

    Обратите внимание, что str_word_count() возвращает число или массив для других входных параметров формата.

    Здесь вы используете строгое сравнение пустых строк.

  • Вы должны использовать действие pre_get_posts если это возможно, вместо введения другого вторичного запроса.

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

  • Другой подход может заключаться в том, чтобы автоматически сохранять эту информацию (например, по почте) при сохранении сообщения.

    Если вы сохраните его под _wpse_searchable post _wpse_searchable вы можете настроить свой мета-запрос:

     'meta_query' => [ 'relation' => 'AND', [ 'key' => '_thumbnail_id', 'compare' => 'EXISTS', ], [ 'key' => '_wpse_searchable', 'value' => true ] ], 

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