ПОЛУЧИТЬ отрывок по ID
-
-
что именно является "некоторым" содержанием?what exactly is "some" of the content?
- 0
- 2011-03-19
- kaiser
-
Функция выдержки в wordpress возвращает отрывок сообщения.Если в сообщении нет выдержки,оно возвращает определенное количество символов содержимого,за которым следует «...» или «читать дальше» или что-то еще,что предоставляет шаблон.The excerpt function in wordpress returns the excerpt of a post. If the post does not have an excerpt it returns a certain number of characters of the content followed by '...' or 'read more' or whatever the template provides
- 0
- 2011-03-19
- Robin I Knight
-
Не быть PITA,но правила сообщества запрещают подписи и стандартные закрытия.Чтобы соблюдать правила и избежать того,чтобы [Джефф Этвуд] (http://stackexchange.com/about/management) отправил вам строгое сообщение после редактирования всех ваших вопросов,пожалуйста,прекратите использовать * "Marvelous" * в качестве заключения.* (И,пожалуйста,не стреляйте в посыльного) *Not to be a PITA but community rules disallow signatures and standard closings. So as to abide by the rules and avoid having [Jeff Atwood](http://stackexchange.com/about/management) send you a stern message after editing all your questions, please stop using *"Marvellous"* as a closing. *(And please don't shoot the messenger)*
- 1
- 2011-03-19
- MikeSchinkel
-
10 ответ
- голосов
-
- 2011-03-19
Привет, @Robin I. Knight:
Я рассматриваю
get_the_excerpt()
как функцию с устаревшим дизайном.По мере роста использования WordPress появляется много новых вариантов использования,которые не подходят,но подходят более новые функции для получения разных данных.Одним из примеров является теперь частое использование массива параметров функции$args
.Но это легко исправить.Вот альтернативная функция,которую вы можете использовать и которую можно поместить в любом месте файла
functions.php
вашей темы:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
Я не проверял,но уверен,что правильно понял.Если это не соответствует вашим потребностям,уточните,возможно,я внесу другие предложения.
Hi @Robin I. Knight:
I view
get_the_excerpt()
as a function with legacy design. As WordPress usage has grown there are many newer use-cases where it doesn't fit but where the newer functions for getting different data do. One example is the now frequent use of an$args
array of function options.But it's easy to fix for your needs. Here's an alternative function you can use which you can put anywhere in your theme's
functions.php
file:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
I've not tested it but am pretty sure I got it right. If this doesn't meet your needs please elaborate and maybe I can make other suggestions.
-
Оно работает.Вроде,как бы,что-то вроде.Очень странные результаты.Он определенно выполняет свою функцию,но результаты странные.Я использую его вместе с GET_Posts,и по какой-то причине 2 самых популярных сообщения всегда одинаковы.Вот ссылка,и вы поймете,что я имею в виду.Посмотрите на 4 столбика с правой стороны.http://www.divethegap.com/update/community/feedback/2010/06/steve-riches/It works. Sort of. Very odd results. It is definitely performing its function but the results are odd. I am using it in conjunction with GET_Posts and for some reason the top 2 get posts are always the same. Here is a link and you will see what I mean. Look at the 4 posts on the right hand side. http://www.divethegap.com/update/community/feedback/2010/06/steve-riches/
- 0
- 2011-03-19
- Robin I Knight
-
@Robin I Knight: опубликуйте исходный код цикла в качестве обновления вашего вопроса;очень сложно отлаживать код,не видя кода.Также,возможно,проблема связана с плагином;попробуйте отключить их по одному.@Robin I Knight: Please post your loop source code as an update to your question; it's very hard to debug code without seeing code. It's also possibly a plugin that is causing the problem; try disabling them one at a time.
- 0
- 2011-03-19
- MikeSchinkel
-
Исходный код цикла,о котором идет речь выше ^^Loop source code in question above ^^
- 0
- 2011-03-19
- Robin I Knight
-
Кстати,я изменил имя функции наget_the_excerpt_id ($post_id)BTW I changed the name of the function to get_the_excerpt_id($post_id)
- 0
- 2011-03-20
- Robin I Knight
-
@Robin I Knight - я ничего не вижу в вашем цикле,но вы можете попробовать вызвать `setup_postdata ($post)` в начале вашего цикла,как предлагает @Rarst.Если это не сработает,возможно,вам нужно отключить плагин;ты пробовал это?И вы,вероятно,не захотите называть это `get_the_excerpt_id ()`,потому что WordPress может добавить эту функцию в будущем и сломать ваш сайт.И вы,вероятно,могли бы обойтись без функции в вашем цикле,используя `foreach ($ stories as $ story):global $post;$post=$ story; `вместо этого.@Robin I Knight - I don't see anything in your loop, but you might try calling `setup_postdata($post)` at the beginning of your loop, as @Rarst suggests. If that doesn't work it might be a plugin you need to disable; have you tried that? And you probably don't want to call it `get_the_excerpt_id()` because WordPress could add that function in the future and break your site. And you could probably do without the function in your loop by using `foreach($stories as $story): global $post; $post = $story;` instead.
- 0
- 2011-03-20
- MikeSchinkel
-
- 2011-03-20
Механика отрывка крайне запутанна.Это не точный ответ на ваш вопрос,но в целом,если вам нужно сделать теги шаблона,специфичные для Loop,работать с массивом,возвращаемым
get_posts()
,вы можете эмулировать Loop следующим образом:$stories = get_posts(); foreach ($stories as $post) { setup_postdata($post); // stuff } wp_reset_postdata();
The mechanics of excerpt are extremely confusing. It is not precise answer to your question but in general if you need to make template tags, specific to Loop, work with array returned by
get_posts()
you can emulate Loop like this:$stories = get_posts(); foreach ($stories as $post) { setup_postdata($post); // stuff } wp_reset_postdata();
-
как насчет wp_reset_query ();?what about wp_reset_query(); ?
- 0
- 2012-01-27
- cwd
-
@cwd,если используется только глобальный запрос setup_postdata (),не затрагивается,и необходимо сбросить только данные публикации.@cwd if only using `setup_postdata()` global query is not affected and only post data needs to be reset.
- 1
- 2012-01-27
- Rarst
-
Это решение проще,чем хранение сообщения в другом var и требует другого сообщения только для того,чтобы сделать его глобальным.+1This solution is allot cleaner than storing the post in another var and requering another post just to get it global. +1
- 0
- 2013-04-10
- Barry Kooij
-
Спасибо @Rarst,что помог мне.Добавление setup_postdata ($post);решил мои проблемыThanks @Rarst that helped me out. Adding setup_postdata($post); resolved my issues
- 0
- 2014-11-14
- Simon
-
- 2012-01-14
Начиная с версии 3.3.0 появилась новая функция: wp_trim_words
Я использую его вне цикла следующим образом:
<?php if ( $post_id ) { $post = get_post( $post_id ); if ( $post ) { ?> <h2><?php echo $post->post_title; ?></h2> <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p> <p><strong>This article can only be read by subscribers.</strong></p> <?php } } ?>
Это не следует путать с wp_trim_excerpt ,который,по-видимому,работает только внутри цикла,поскольку он вызываетthe_content () внутренне.
There is a new function since 3.3.0: wp_trim_words
I'm using it outside the loop as follows:
<?php if ( $post_id ) { $post = get_post( $post_id ); if ( $post ) { ?> <h2><?php echo $post->post_title; ?></h2> <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p> <p><strong>This article can only be read by subscribers.</strong></p> <?php } } ?>
This is not to be confused with wp_trim_excerpt that apparently only works within the loop, since it calls the_content() internally.
-
- 2013-08-30
Просто чтобы добавить к ответу Майка Шинкеля,который по какой-то причине не сработал для меня.Мне пришлось добавить строку setup_postdata,чтобы она работала.
function get_the_excerpt( $post_id ){ global $post; $save_post = $post; $post = get_post($post_id); setup_postdata( $post ); // hello $output = get_the_excerpt(); $post = $save_post; return $output;
}
Я предполагаю,что если вы используете это вне цикла,это не должно мешать работе других setup_postdata.
Ура
Just to add to MikeSchinkel's answer, which for some reason wouldn't work for me. I had to add the setup_postdata line to make it work.
function get_the_excerpt( $post_id ){ global $post; $save_post = $post; $post = get_post($post_id); setup_postdata( $post ); // hello $output = get_the_excerpt(); $post = $save_post; return $output;
}
I'm assuming if you're using this outside the loop then it shouldn't interfere with other setup_postdata going on.
Cheers
-
Я попробовал ответить Майка Шинкеля,и у меня это не сработало.Настройка данных публикации сделала свое дело.В моем случае без "setup_postdata" функция вернула заголовок + отрывок родительского сообщения.I tried MikeSchinkel's answer and it did not work for me. Setting up post data did the trick. In my case without the 'setup_postdata' the function returned the title+excerpt of the parent post.
- 0
- 2016-09-25
- turzifer
-
- 2013-05-02
Будет ли это работать на основе ответа @ Maxime?
$post = get_post( $id ); $excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
Мне это кажется достаточно простым,но мне интересно,не упустил ли я что-то.
Building on @Maxime's answer, would this work?
$post = get_post( $id ); $excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
It seems straight forward enough to me, but I'm wondering if I'm missing something.
-
- 2011-07-11
Если ВСЕ ваши сообщения имеют тег
<!--more-->
,то вы можете использовать в приведенном выше коде следующее:$sjc_excerpt = explode( '<!--more-->', $post->post_content); echo wpautop( $sjc_excerpt[0] );
Конечно,если у вас есть сообщения без тега
<!--more-->
,они будут показаны полностью.Работает в моей ситуации,но не для всех ...If ALL your posts have the
<!--more-->
tag, then you can use the following with your code above:$sjc_excerpt = explode( '<!--more-->', $post->post_content); echo wpautop( $sjc_excerpt[0] );
Of course if you have any posts that don't have the
<!--more-->
tag, they'll be shown in their entirety. Works in my situation, but not for all... -
- 2016-04-19
Я рассматриваю
get_the_excerpt()
как функцию с устаревшим дизайном.По мере роста использования WordPress появляется много новых вариантов использования,которые не подходят,но подходят более новые функции для получения других данных.Одним из примеров является теперь частое использование массива параметров функции$args
.Но это легко исправить.Вот альтернативная функция,которую вы можете использовать и которую можно поместить в любом месте файла
functions.php
вашей темы:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
Просто чтобы добавить к ответу Майка Шинкеля,который по какой-то причине не сработал для меня.Мне пришлось добавить строку setup_postdata,чтобы она работала.
I view
get_the_excerpt()
as a function with legacy design. As WordPress usage has grown there are many newer use-cases where it doesn't fit but where the newer functions for getting different data do. One example is the now frequent use of an$args
array of function options.But it's easy to fix for your needs. Here's an alternative function you can use which you can put anywhere in your theme's
functions.php
file:function robins_get_the_excerpt($post_id) { global $post; $save_post = $post; $post = get_post($post_id); $output = get_the_excerpt(); $post = $save_post; return $output; }
Just to add to MikeSchinkel's answer, which for some reason wouldn't work for me. I had to add the setup_postdata line to make it work.
-
Требуется ли для работы внутри цикла `wp_reset_postdata ()`?Does this need `wp_reset_post_data()` to work inside the loop?
- 0
- 2017-07-10
- Chris Pink
-
Судя по всему (обойдя этот конкретный дом) теперь это часть ядра.Apparently (after going around this particular house) it's now part of core.
- 0
- 2017-07-10
- Chris Pink
-
- 2016-06-08
Это небольшой двухстрочный текст,который я часто использую,используя wp_trim_words сильный>. Я постоянно замечаю,что нуждаюсь в сокращении и читаю больше функций вне цикла. Кому-то это может пригодиться. Вот что я использую:
- Получить выдержку по идентификатору POST.
- Получить содержимое сообщения. Если выдержка не задана,
- Установите длину выдержки в словах.
- Выберите содержание для получения дополнительной информации (ссылка/текст)
Я помещаю это в строку,прямо в настраиваемый шаблон,который я редактирую.
//Get Post Object $dapost = get_post(POST_ID); //Get the Execerpt $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );
Разбить
1. Содержание выдержки
Получить выдержку по идентификатору сообщения,но получить содержание сообщения,если выдержка не была установлена.
Я использую сокращение If/Else PHP .
$dapost = get_post(POST_ID); apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content
2. Длина слова
Установите количество слов в отрывке на 20
"20"
3. Выберите ReadMore Content (Link/Text)
"<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"
Я использовал
$dapost->guid
для получения URL-адреса,потому что мне не нужны дружественные URL-адреса и я хотел избежать повторного обращения к БД. Вы всегда можете использоватьget_the_permalink.См. wp_trim_words в документации Wordpress.
This is a little two-liner I use a lot utilizing wp_trim_words. I constantly finding myself needing the abbreviation and read more functionalities outside of the loop. Some one else may find this useful. So this is what I use to:
- Get the Excerpt by POST ID
- Get Post Content If no Excerpt has been set,
- Set the Word length of the Excerpt
- Choose the Content for the Read More(Link/Text)
I put this inline, directly in the custom template I am editing.
//Get Post Object $dapost = get_post(POST_ID); //Get the Execerpt $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );
Break Down
1.The excerpt content
Get the Excerpt by Post ID but, get Post Content If no Excerpt has been set.
I am using If/Else PHP shorthand.
$dapost = get_post(POST_ID); apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content
2. Word length
Set the amount of words in the Excerpt to 20
"20"
3. Choose ReadMore Content(Link/Text)
"<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"
I used
$dapost->guid
to get the URL, because I did not need friendly URLs, and wanted to avoid another call to the DB. You could always use get_the_permalink.See wp_trim_words in the Wordpress Documentation.
-
-
- 2018-09-07
Из WP 4.5.0 можно использовать идентификатор сообщения в качестве параметра
get_the_excerpt( $post->ID )
Источник: https://developer.wordpress.org/reference/functions/get_the_excerpt/
From WP 4.5.0 is possible use the post ID as parameter
get_the_excerpt( $post->ID )
Source:https://developer.wordpress.org/reference/functions/get_the_excerpt/
Почему нельзя получить отрывок по идентификатору,как по заголовку и большинству других элементов.
например.get_the_excerpt (идентификатор). Я знаю,как использовать его с функцией $post->post_excerpt,но она не возвращает часть содержимого,если не было введено ни одной выдержки,она просто ничего не возвращает.
Итак,я пытаюсь получить отрывок по идентификатору,если отрывок есть,и если отрывка с этим идентификатором нет,но есть некоторый контент,вместо этого получить часть контента.
Как бы это сделать.
Любые идеи,
Прекрасно ...
ИЗМЕНИТЬ -
Исходный код цикла по запросу.