Intereting Posts
Как создать лицевую сторону пользователя зарегистрироваться, войти в систему и профилировать страницы, такие как FoodGawker.Com Набор пользовательских продуктов Woocommerce Скрытие цены продукта Не удалось найти ошибку сайта Можно ли использовать переменную hook для языковой строки? отображать список сообщений / страниц в admin edit post / page Архив таксономии с таким же слизнем, как пользовательский тип сообщения? Как мы добавляем новые категории по wp_insert_post wp_editor теряет данные, возможно, проблему html_entity_decode? Условно переадресовать на определенную страницу с использованием значения флажка Каков наилучший способ перезаписать /wp-admin/ms-delete-site.php Условное значение для get_the_author_meta Как печатать выходные данные функции get_num_queries от frontend до backend? Как отобразить что-то в div, когда пользователь нажимает на текст в другом div – обновить страницу Импортировать все медиа, на которые ссылаются сообщения

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

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

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

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

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

$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(); } ?> 

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

  • Существует проблема с тем, как определяется $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 ] ], 

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