The content


There are sometimes these questions that nags you and hunts you down later in life again, and this is one such question.

This question had me thinking about an alternative solution to the problem. As I already stated, custom fields and meta boxes are there to store small pieces of meta data, and not to act as an extension to post content where you can execute shortcode and functions. Also, as I already stated, your method is incorrect and should not be used

What I did found interesting in your post is that you used custom fields and meta boxes to inadvertently display custom content from user input. So I sat and thought of a possible way to make this work and use the custom field data and meta box data correctly

This is my idea:

THE SCENARIO:

NOTE: This can be modified to suit any need

On a single post, a user wants/requires to show custom content dynamically after the post to suit his needs. This should be dynamic. The content should be a custom query, and the user needs to choose what to show whenever he wants and what he wants

THE POSSIBLE SOLUTION:

Shortcodes will not work here, as shortcodes can’t be executed in custom fields. Neither will do_shortcode


work, as it is not dynamic and is hardcoded, something we don’t want. As in your question, we are going to make use of a custom fields. Again I stress, do not use the custom field to execute a custom query or shortcodes

THE PLAN:

We will use the custom field to only save our query arguments, that is all. So, what we do is, we create a custom field called custom_query_arguments. In your post editor screen, you will now see your custom field, ready for use

The next step will be to add our custom query arguments to our field. Lets say, we need to show 3 posts from category 1 sorted by title. So our query arguments should look like this: (In string format)

'posts_per_page=3&cat=1&orderby=title' 

This is what you should now enter in your custom field. Once entered, save the value of your custom field

Next will be to construct the custom query in your single.php. What is needed here, we need to get the value from our custom field, which is actually our query arguments, and feed that to a new instance of WP_Query to retrieve the posts. We also need to check whether or not we actually have a value saved in that custom field, if the custom field is empty, show nothing

THE CODE:

You can try something like this in single.php just after the single post.

 

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true ); // check if the custom field has a value if( ! empty( $args ) ) { $q = new WP_Query( $args ); if( $q->have_posts() ) { while( $q->have_posts() ) { $q->the_post(); the_title(); } wp_reset_postdata(); } }

If the user wants to remove the custom query, he can simply just delete the value of the custom field and leave the custom field blank. If he needs to show the same query but from category 10 and a total of 5 posts, he can just replace the original value with the following

'posts_per_page=5&cat=10&orderby=title' 

FEW NOTES:

It is important to use the correct synatx and format when entering info into this custom fields and meta boxes. Syntax errors or incorrect info will lead to undesired output or even fatal errors. It is important to let your clients know of such info

ORIGINAL ANSWER

I don’t understand what you are trying to accomplish, but from what I can tell you, those are two separate things

OPTION 1

apply_filters('the_content', $content); is used to apply the content filters to raw unfiltered post content, which usually comes from the use of $post->post_content


. These filters include the famous filter wp_autop which adds p tags to the_content()

apply_filters('the_content', $content); is usally used in conjuction with get_posts where one works directly with the WP_Post objects without using setup_postdata( $post ) which makes the template tags like the_content() available for use

OPTION 2

do_shortcode is used to add a shortcode anywhere in template files outside the text editor in the page editor screen back end, basically filtering shortcodes through their hooks.

The correct use is as follows

Example: Adding the gallery shortcode in a template file

echo do_shortcode( '
' ) 

EDIT 1

From your comments, I would not use a shortcode at all then.

If you are not going to add a shortcode via the text editor and going to add it directly (hardcode) via do_shortcode


in a template file, I would rather then just add the function to the template

Example:

If you have the following shortcode function

function footag_func( $atts ) {  return "foo = {$atts['foo']}"; } add_shortcode( 'footag', 'footag_func' ); 

You can simply call the function directly in a template like

echo footag_func(); 

It is much faster this way as the shortcode need not be parsed

EDIT 2

To be honest here, you are completely doing this wrong from your edit. That is why I could not understand your initial question

Sometimes, I need to add post meta on post/pages/custom post types, so that they can add shortcodes (slider, contact form etc) or just a simple text. It’s a text filed.

To make the shortcode working, I use option 1…..

Custom fields are not text fields and are surely not meant to be used to execute shortcodes and for that matter sliders or contact forms. Custom fields should never be used to replace the text editor in posts and pages.

As I stated before, apply_filters('the_content', $content); is meant to be used to apply formatting to raw post content.

You have two choices here

  • Use do_shortcode directly in template files, which I would not recommend as using the function is faster as the shortcode need not be parsed

  • Use the shortcode directly in the text editor for the particular page/post


I would seriously recommend that you take a fresh new look at your structures and what you want to achieve. Custom fields are not text editors and cannot execute shortcodes or sliders.

My recommendation would be to look maybe into custom widgets or a system which you can use with custom fields

wordpress.stackexchange.com

Вид главной страницы и рубрик в WordPress по умолчанию

Как вы, наверное, знаете, если при написании поста в WordPress никаких особых телодвижений не предпринимать, то он, скорее всего, будет полностью отображаться на главной странице, а сразу под ним будет идти предыдущий пост, который вы опубликовали ранее. Почему я сказал «скорее всего»? Потому что вывод постов на главной по большому счету зависит от используемой вами темы оформления, а они бываю разными, в том числе и довольно-таки экзотическими.

Но по большей части для вывода постов на главной в файле index.php (именно этот файл-шаблон используется для формирования вида главной страницы в Вордпресс — смотрите статью по приведенной выше ссылке про темы) используется конструкция типа:

<?php the_content('Читать полностью >>>'); ?>

Именно благодаря ей и будут на главной выводиться статьи целиком, если только вы не используете замечательный тег More, которому я целую статью в свое время посвятил. При просмотре полной версии статьи он никак не отражается на ее внешнем виде, но вот на главной уже будет выводиться не пост целиком, а только та его часть, которая находится выше тега More, а вместо самого тега будет выводиться надпись типа «Читать полностью».


Лично я пишу статьи без использования визуального редактора, и этот тег, вставленный в текст статьи (между абзацами), выглядит так:

<!--more-->

Однако, можно поизгаляться и написать, например, вот так:

<!--moreЧитать далее эту замечательную статью про вывод постов на главной странице и в рубриках WordPress-->

Думаю, что суть понятна — мы создаем с главной ссылку на статью не просто с «мусорным» анкором «Читать подробнее» (одинаковым для всех статьей), а добавляем к нему ключевые слова, по которым вы хотите попасть в Топ поисковых систем. Не скажу, что этот способ стопроцентно приносит пользу, но некоторые блогеры (в том числе и я до некоторых пор) его используют.

В общем, тег More помогает сделать главную страницу вашего блога на WordPress более юзабельной (и избавить блог от дублирования контента, что очень важно для его SEO оптимизации), особенно, если размеры постов у вас достаточно большие. В каком именно месте ставить этот тег отделения анонса вы уже решайте сами — главное, чтобы посетителям было удобно (читайте про 8 основных ошибок и 6 советов для успешного продвижения).


до разбиения ее на страницы, задается в настройках админки WordPress. Для этого вам нужно будет зайти в нее, выбрать из левого меню пункты «Настройки» — «Чтение» и поставить в поле «На страницах блога отображать не более» нужное количество материалов (постов).

The content

Какие недостатки можно отметить при данном типе вывода материалов на главную страницу WordPress? В общем-то, их несколько:

  1. Если выводить посты на главной целиком (без тега More), то в глазах поисковых систем у вас на сайте будет наблюдаться дублирование контента, что может привести к снижению трафика на ваш блог из Яндекса и Гугла. Не факт, что так и будет, но вероятность ухудшения в ранжировании будет очень высока. Грубо говоря, поисковики обидятся на вас за то, что вы на разных страницах сайта подсовываете им в индекс одно и то же, что забивает их сервера и приводит к дополнительным расходам.
  2. Опять же, без использования тега More вам придется, скорее всего, серьезно ограничивать число отображаемых на главной постов, чтобы она не была похожа на бесконечную и трудно юзаемую простыню. И даже в этом случае удобство пользования вашим блогом все равно будет не очень высоким.

  3. Если даже использовать тег More, но отдавать на главную очень большой фрагмент поста, то поисковики опять же могут усмотреть пусть и не полное, но частичное дублирование контента. Понятно, что глобального влияния это не окажет, но весь мир SEO строится на сотнях мелочей, которые и определяют вкупе успех или неудачу вашего проекта. Поэтому лучше сразу привыкать делать все «как надо», а не «так сойдет».
  4. Еще хуже ситуация с дублирование контента внутри сайта может стать, если вы и в рубриках, и в архивах тегов (а также и во временных архивах) выводите полные версии постов или их большие куски. Частично эту проблему можно решить закрытием от индексации поисковыми системами, например, временных и теговых архивов с помощью плагина All in One SEO Pack (в приведенной статье описано как это можно сделать), но лучше все же этого не делать.

Есть способ, решающий проблему с дублированием контента при использовании функции the_content. Это специальный тег NOTEASER. Что он делает? При его использовании, на главной будет отображаться только та часть статьи, которая находится выше тега More, а на странице самого поста анонс не будет отображаться вовсе, (только текст, идущий сразу за MORE). Выглядеть конструкция будет так:

<!--more--><!--noteaser-->

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

Вывод постов в рубриках — the_excerpt вместо the_content


Кстати, в рубриках и архивах тегов тоже зачастую используется такой же метод отображения. Т.е. выводятся либо полные версии постов (в порядке убывания их даты создания), либо обрезанные проставленным тегом More фрагменты.

The content

Т.е. используется в шаблоне рубрик (обычно это файл-шаблон archive.php из папки с используемой вами темой оформления) такая же функция, как и для вывода постов на главной:

<?php the_content('Читать полностью >>>'); ?>

Посмотреть пример такого вывода постов в рубриках вы можете на блоге Михаила Шакина. Конечно же, изначально все это зависит от той темы оформления, которую вы используете. Но все в вашей власти. Достаточно будет заменить функцию the_content на the_excerpt и вывод постов в рубриках станет существенно более юзабельным, при этом значительно уменьшится степень дублирования контента на вашем блоге.

Причем, сделать эту настройку очень просто — достаточно заменить в файле archive.php код функции the_content () на the_excerpt ():


<?php the_excerpt(); ?>

В этом случае от поста останется только его заголовок и небольшое количество первых слов в статье (без форматирования и с удалением имеющихся картинок, гиперссылок и прочей разметки). Сразу оговорюсь, что число слов (или символов) в заголовке, а также число первых выводимых слов поста можно будет ограничить с помощью возможностей файлика functions.php (как именно объясню чуть ниже).

The content

Как сделать анонсы постов в рубриках WordPress уникальными?

Правда, содержимое анонса поста при использовании функции the_excerpt () может быть заменено содержимым поля «Цитата», если вы его заполняли при написании статьи (обычно, оно расположено сразу под окном ввода текста). Кстати, данный вариант и снижения дублирования контента, но я его не практикую в силу того, что «не практикую». В общем, банальная лень матушка.

The content

Если области под названием «Цитата» вы под окном ввода текста поста в админке WordPress не наблюдаете, то удалите ваш сайт и переустановите движок заново, а потом перепишите все статьи и займитесь их продвижением. Ну, а если серьезно, то в самом верху админки в ее правой части вы найдете «язычок» с названием «Настройки экрана». Кликнув по нему вы легко сможете активировать нужную вам панель (или убрать лишнюю) простой постановкой или удалением нужной галочки.

The content

Настраиваем вид постов в рубриках при выводе их с помощью the_excerpt

Таким образом, если вы не заполняете для каждого поста поле «Цитата», то при использовании the_excerpt () под заголовком по умолчанию будет . Вас это не устраивает? Как уже упоминал чуть выше, все можно настроить с помощью functions.php. Просто открываете его и добавляете несколько новых строк:

<?php function new_excerpt_length($length) {  return 30; } add_filter('excerpt_length', 'new_excerpt_length'); ?>

где вместо 30 вы можете поставить нужно вам число слов, отображаемое на страницах рубрик WordPress под заголовками статей.

Ну и, наконец, вы можете заменить окончание вида […] (которое не слишком-то уж и информативно) на привычную ссылку «Читать далее». Оно вам надо? Тогда добавьте в файл functions.php следующий код:

<?php function new_excerpt_more($more) { return '<a href="'. get_permalink($post->ID) . '">' . ' Читать далее ..' . '</a>'; } add_filter('excerpt_more', 'new_excerpt_more'); ?>

Если заголовки статей у вас такие же длинные как у меня, то в категориях можно . Для этого вместо the_excerpt () вставьте:

<?php do_excerpt(get_the_title(), 7); ?>

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

function do_excerpt($string, $word_limit) {  $words = explode(' ', $string, ($word_limit + 1));  if (count($words) > $word_limit)  array_pop($words);  echo implode(' ', $words).' ...'; }

Вместо троеточия в последней строке можете поставить что-то другое, но, скорее всего, лучше так и оставить.

Как выводить на главной или в рубриках WordPress только заголовки постов?

Ну, тут совсем все просто. Достаточно будет удалить из файла-шаблона archive.php (отвечает за формирования архивов (категорий, тегов и т.п.), однако его может не быть в вашей теме оформления) или index.php (отвечает за формирование главной страницы блога, но зачастую и всех остальных с помощью условных операторов) функцию the_excerpt или the_content (смотря что именно используется).

Например, у меня за вывод постов в рубриках отвечает такая конструкция:

<div class="xboxcontent"> <h6><a target="_blank" href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php do_excerpt(get_the_title(), 9); ?></a></h6> <?php the_excerpt('Подробнее'); ?> </div>

Убрав из этой записи:

<?php the_excerpt('Подробнее'); ?>

Я добьюсь того, что в рубриках у меня будут выводиться одни лишь заголовки постов без каких-либо текстов анонса или содержимого поля «Цитата». В ряде случаев такой вариант может быть вполне востребован. По-любому таким образом вы полностью решаете проблему дублирования, озвученную чуть выше по тексту.

Добавляем миниатюры в посты на главной и в рубриках

При использовании the_excerpt пост выглядит не очень привлекательно, ибо из него удаляется все форматирование, ссылки и картинки. В рубриках это худо бедно можно пережить, а вот на главной нужно будет как-то это дело оживить. Для этого как нельзя лучше подойдут миниатюры, которые уже довольно давно прижились в WordPress.

Если у вас не созданы миниатюры для всех постов, то не беда. В свое время у меня их тоже не было, ибо блог я начал вести еще до их появления в WordPress. Однако, существует замечательный плагин Auto Post Thumbnail для их автоматического создания на основе первой картинки в посте (меня такой вариант вполне устроил). После установки заходите в его настройки и жмете на кнопку для создания миниатюрных картинок различных размеров, за основу которых будет браться первая картинка поста.

The content

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

The content

Если у вас этой области «Миниатюра записи» по каким-либо причинам в админке при работе с постом не отображается, то как я и говорил выше — сносите блог и начинайте все заново. Правда я пошел по другому пути — добавил в замечательный файлик functions.php (из папки с используемой вами темой оформления) пару новых строк в самом низу:

<?php if ( function_exists( 'add_theme_support' ) ) add_theme_support( 'post-thumbnails' ); ?>

И все заработало. Так вот, если проблем с миниатюрами у вас никаких нет, то можете попробовать заменить обычный вывод постов на главной или в рубриках WordPress с помощью the_excerpt на такую вот конструкцию, добавляющую миниатюру в пост:

<?php the_post_thumbnail(array(150,150), array('class' => 'alignleft'));?> <?php the_excerpt() ?> <a href="<?php the_permalink(); ?>">Читать далее</a>

По умолчанию миниатюра будет прижата к левому краю, а текст будет ее обтекать. Только я еще в свой стилевой файл style.css добавил небольшие отступы от миниатюры, чтобы все это дело лучше воспринималось. Для этого достаточно было добавить лишь одну строчку:

.wp-post-image {padding:3px 15px 5px 5px;}

Однако, на главной я все же оставил вывод постов с помощью the_content и тега More, а в рубриках по-прежнему использую «голый» the_excerpt. Но все же описанный способ я реализовал, но не на совсем типичной для блога странице «Лучшее».

The content

По-моему прикольно получилось.

ktonanovenkogo.ru

Что делать, если у вас выводится полный текст поста, а вы хотите выводить анонсы со ссылкой «Далее»?

Всё, что нам потребуется сделать, это:

  • Непосредственно перед циклом определить глобальную переменную $more.
  • Затем, уже непосредственно перед функцией the_content() присвоить ей значение 0 (отображать анонсы) или 1 (отображать целиком весь пост):

Пример:

Читайте также описание функции the_title().

Второй пример — возможно вы уже читали пост про прилепленные записи. Так вот, используя условный тег is_sticky(), мы можем сделать так, чтобы для прилепленных записей контент отображался целиком, а для всех остальных записей выводились только анонсы.

Как вывести содержимое конкретного поста, зная его ID?

В отличие от функций get_the_title() и get_permalink() функции для вывода контента поста не имеют параметра с ID поста, так что нам не удастся получить или вывести контент какого-либо определенного поста вне цикла этим способом.

Другой способ — функция get_post().

В этом примере (который выше) у нас выведется неотфильтрованный контент — в том самом виде, в котором он находится в базе данных. Так как очень многие плагины в WordPress применяют свои фильтры к контенту постов, то такой способ хорош, если вы хотите обойти этот фильтр.

Если фильтр the_content в данном случае вам нужен, тогда наш пример изменится следующим образом:

Фильтры

the_content_more_link — позволяет изменить кнопку «Далее»

Как же так, ведь текст кнопки «Далее» можно указать в первом параметре функции the_content()? Дело в том, что там вы можете указать только текст ссылки, а фильтр the_content_more_link позволяет полностью изменить её HTML код.

В качестве примера добавим к ссылке «Далее» HTML-атрибут target="_blank".

the_content — изменяем содержимое поста перед выводом

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

misha.blog


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.