Intereting Posts
Если нет сообщений автора, выделите какой-то текст Добавить дополнительную разметку в меню WP функция meta box & callback Как я могу просто получить контент внутри короткого кода или просто снаружи получить URL-адрес настраиваемого поля с нестандартным размером – get_post_meta, wp_get_attachment_image_src Помогите отобразить изображение в одном посте, используя javascript zoom image ..? Как установить пустой поиск для загрузки шаблона главной страницы, а не index.php Пользовательские таксономии неправильно подсчитывают изменения? Woocommerce: получите идентификатор корзины Случайный сортировка по уже отсортированному запросу Добавление отступов при создании эскиза Плагин, который позволит авторам WordPress «следовать» другим авторам и запрашивать «Информация о деятельности» из этого Как вставить данные с помощью wp cron Предпочтительное использование home_url ()? Многоязычный сайт в разных доменах

Отображать только одно оповещение

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

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

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

Функция защиты контента:

 /*Show Excerpt for Protected Content*/ //Show mm content even if the user doesn't have access function customContentProtection($data) { error_log('customContentProtection'); return true; } add_filter('mm_bypass_content_protection', 'customContentProtection'); //then we add the filters for the archive content add_filter( 'the_content', 'sbm_mm_content_filter' ); function sbm_mm_content_filter( $content ) { global $post; global $post_id; if ( !is_singular()) return $content; $new_content = $content; // define what users without access view if ( mm_access_decision(array("access"=>"true")) != true ){ //Need to apply a filter to get the excerpt if the template doesn't include it $new_content = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id)); /* //This is where we output the excerpt & login form echo '<div>' . $new_content . '</div><br><div>' . do_shortcode('[mm-form-c form="red" url="/member-registration"]') .'</div>'; */ //Instead of the excerpt let's output a blurred text image $url = site_url(); echo '<div class="no-access-wrapper"> <div class="no-access"> <img src=" ' . $url . '/wp-content/themes/splash-child/images/blurred-text.png"></div> <div class="no-access-top"> <h3 style="text-align:center;">This content is for members only. Please login or sign up.</h3> ' . do_shortcode('[mm-form-c form="red" url="/member-registration"]') . ' <br> <p style="text-align:center;"> If you are already logged in and are having trouble viewing this content, please <a href="mailto: support@sportsbettingmax.com">contact support</a></p> </div> </div>'; } else return $new_content; } 

Вот раздел моего файла single.php, который выводит виджет связанных записей:

  <?php } $related_post_number = $bdp_settings['related_post_number']; $col_class = ''; if ($related_post_number == 2) { $post_perpage = 2; } if ($related_post_number == 3) { $post_perpage = 3; } if ($related_post_number == 4) { $post_perpage = 4; } $related_post_by = $bdp_settings['related_post_by']; $title = $bdp_settings['related_post_title']; if (isset($bdp_settings['display_related_post']) && $bdp_settings['display_related_post'] == 1) { $related_post_content_length = isset($bdp_settings['related_post_content_length']) ? $bdp_settings['related_post_content_length'] : ''; $args = array(); if ($related_post_by == "category") { global $post; $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach ($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args = array( 'category__in' => $category_ids, 'post__not_in' => array($post->ID), 'posts_per_page' => $post_perpage // Number of related posts that will be displayed. 'caller_get_posts' => 1, ); } } elseif ($related_post_by == "tag") { global $post; $tags = wp_get_post_tags($post->ID); if ($tags) { $tag_ids = array(); foreach ($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id; $args = array( 'tag__in' => $tag_ids, 'post__not_in' => array($post->ID), 'posts_per_page' => $post_perpage // Number of related posts to display. ); } } $my_query = new wp_query($args); if ($my_query->have_posts()) { ?> <div class="related_post_wrap"> <?php do_action('bdp_related_post_detail', $theme, $post_perpage, $related_post_by, $title, $related_post_content_length); ?> </div> <?php } } // If comments are open or we have at least one comment, load up the comment template. if ($bdp_settings['display_comment'] == 1) { if (comments_open() || get_comments_number()) { comments_template(); } } // End of the loop. endwhile; if ($theme == "offer_blog" || $theme == "winter") { echo '</div>'; } ?> </div> <?php do_action('bdp_after_single_page'); ?> </main><!-- .site-main --> </div><!-- .content-area --> 

Solutions Collecting From Web of "Отображать только одно оповещение"

Я думаю, что решение состоит в том, чтобы проверить, является ли это основным запросом. У WordPress есть функция для этого, is_main_query ()

Запрос, который вы используете в is_main_query() связанных сообщений, является вторичным запросом, поэтому is_main_query() вернет false.

Вы можете воспользоваться этим, изменив свой код следующим образом:

if ( ! is_main_query() || ! is_singular() ) return $content;

Из внешнего вида этого кода вы используете плагин Blog Designer Pro.

Проверьте admin/functions.php . Существует функция, которая обрабатывает выходные данные соответствующих сообщений. Они используют get_the_content для переменной $excerpt . Просто измените это на get_the_excerpt и ваша функция должна работать.