Intereting Posts

Как получить нефильтрованную выдержку без или автозапуска

Стандартный способ получения отрывка – использовать the_excerpt() или get_the_excerpt() . Я пытаюсь получить только фактическое содержимое поля Excerpt.

Если есть отрывок, я хочу показать его полностью (без сокращения или добавления […]). Если нет отрывка, я не хочу, чтобы что-то отображалось.

Есть ли простой способ сделать это в WordPress?

Что-то вроде этого:

 $real_excerpt = ??? if ( $real_excerpt ) { echo $real_excerpt; } // shouldn't show anything if there isn't a custom excerpt 

Solutions Collecting From Web of "Как получить нефильтрованную выдержку без или автозапуска"

Почему бы вам не использовать глобальную переменную $post ? Он содержит объект с содержимым, так как он находится в строке db, соответствующей этой записи. Вот как это использовать:

 global $post; // If for some reason it's readily accessible, invoke it if($post->post_excerpt != '') { echo($post->post_excerpt); } 

Или:

 $my_post = get_post($post_id); if($my_post->post_excerpt != '') { echo($my_post->post_excerpt); } 

Очень просто, но сообщите нам, если у вас возникнут проблемы с его работой.

Отслеживание:

the_excerpt()

Когда вы посмотрите на источник the_excerpt() , вы найдете следующее определение функции:

 function the_excerpt() { echo apply_filters('the_excerpt', get_the_excerpt()); } 

Это означает, что get_the_excerpt() содержит простой, нефильтрованный контент.

get_the_excerpt()

Когда вы посмотрите на источник get_the_excerpt() , вы увидите следующее:

 function get_the_excerpt( $deprecated = '' ) { if ( !empty( $deprecated ) ) _deprecated_argument( __FUNCTION__, '2.3' ); global $post; $output = $post->post_excerpt; if ( post_password_required($post) ) { $output = __('There is no excerpt because this is a protected post.'); return $output; } return apply_filters('get_the_excerpt', $output); } 

Поэтому в get_the_excerpt() добавлены фильтры.

Фильтры по умолчанию & wp_trim_excerpt()

Все основные фильтры, которые привязаны к чему-либо , можно найти внутри ~/wp-includes/default-filters.php .

Там вы найдете (с WP версии 3.4) следующий фильтр: wp_trim_excerpt() на линии № 147 .

Функция wp_trim_excerpt() выглядит следующим образом:

 function wp_trim_excerpt($text = '') { $raw_excerpt = $text; if ( '' == $text ) { $text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); } 

Каковы наши варианты?

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

Вызов plain ->excerpt , дает вам выдержку в каждом случае, за исключением случаев, когда ее нет. Это означает, что вы можете вставлять scripts и теги CDATA как объясняется в этом ответе , но также должны иметь дело с проверкой пароля после отправки, а также перемещаться во всех фильтрах, которые вам нужны.