Intereting Posts
Пользовательское правило перезаписи типа публикации для автора и пейджинга? Расширенные пользовательские поля – отображать метку и значение, только если введенное значение Заказывать сообщения (по всему сайту) по дате метаданных проблемы с задержкой с установкой wordpress (из импорта SQL) Несколько изображений с Media Uploader на интерфейсе Отображение ошибок из моего сценария BuddyPress Выполните jQuery с пользовательским прослушивателем событий после успешного добавления элемента в корзину Добавьте ссылку меню (на страницу WordPress) в меню администратора / боковой панели Как добавить встроенный предварительный просмотр в текстовый обмен? Запросить пользовательские сообщения только для входа в систему 'rewrite_rules_array' или 'generate_rewrite_rules' для добавления пользовательских правил перезаписи? Как добавить комментарии к странице? Сообщения с несколькими авторами с разными ролями Найти файл url в сообщении и добавить его в медиа-библиотеку WP-CLI внезапный пустой ответ

Получить отрывок, используя get_the_excerpt вне цикла

У меня есть код, который вызывает get_the_title() и он работает, но get_the_excerpt() возвращает пустой. Как я могу заставить его работать?

Этот код находится внутри плагина под названием «WP Facebook Open Graph protocol». Вот часть, которую я хочу изменить:

 if (is_singular('post')) { if (has_excerpt($post->ID)) { echo "\t<meta property='og:description' content='".esc_attr(strip_tags(get_the_excerpt($post->ID)))."' />\n"; }else{ echo "\t<meta property='og:description' content='". [?] ."' />\n"; } }else{ echo "\t<meta property='og:description' content='".get_bloginfo('description')."' />\n"; } 

Здесь has_excerpt всегда терпит неудачу, и get_the_excerpt($post->ID) больше не работает (устарел).

Итак, как я могу отобразить выдержку там?

ps: Я также использую плагин «Advanced Excerpt»

Я нашел этот вопрос, когда смотрел, как это сделать без объекта post.

Мои дополнительные исследования показали эту технику:

$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));

Так как кажется, что у вас уже есть объект post, вам нужен отрывок, вы можете просто заставить работать:

 setup_postdata( $post ); $excerpt = get_the_excerpt(); 

Функция setup_postdata() будет глобализовать объект $post и сделать его доступным для обычной старой функции цикла. Когда вы находитесь внутри цикла, вы вызываете the_post() и он устанавливает вещи для вас … вне цикла вам нужно принудительно его вручную.

Попробуй это:

Создайте новую функцию в functions.php, а затем вызовите ее откуда угодно.

 function get_excerpt_by_id($post_id){ $the_post = get_post($post_id); //Gets post ID $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt $excerpt_length = 35; //Sets excerpt length by word count $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images $words = explode(' ', $the_excerpt, $excerpt_length + 1); if(count($words) > $excerpt_length) : array_pop($words); array_push($words, '…'); $the_excerpt = implode(' ', $words); endif; $the_excerpt = '<p>' . $the_excerpt . '</p>'; return $the_excerpt; } 

Вот сообщение, описывающее код.

Теперь вы можете просто использовать get_the_excerpt( $postID ) . Поскольку: WordPress 4.5.0 ввел параметр $post .

получил его с помощью my_excerpt($post->post_content, get_the_excerpt()) и с помощью функции my_excerpt() из Использование wp_trim_excerpt, чтобы получить the_excerpt () вне цикла

Если у вас нет объекта post, вот короткая функция, подобная той, что у Withers.

 function get_excerpt_by_id($post_id){ $the_post = get_post($post_id); $the_excerpt = $the_post->post_excerpt; return $the_excerpt; } 

Это нужно, если вы хотите использовать get_the_excerpt() вне цикла:

 function custom_get_excerpt($post_id) { $temp = $post; $post = get_post($post_id); setup_postdata($post); $excerpt = get_the_excerpt(); wp_reset_postdata(); $post = $temp; return $excerpt; } 

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

 // 30 is the number of words ehere $excerpt = wp_trim_words(get_post_field('post_content', $post_id), 30);