WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

the_meta() WP 1.2.0

Выводит произвольные поля записи (метаданные из wp_postmeta). Поля выводятся в списке <li>. Скрытые поля игнорируются.

Функция должна использоваться внутри Цикла WordPress или в файле single.php - там где есть данные записи.

Скрытые поля — произвольные поля (названия полей) начинающиеся с нижнего подчеркивания _ игнорируются (в списке не попадают). Такая маркировка используются WordPress для системных метаполей.

Работает на основе: get_post_custom_keys()
✈ 1 раз = 0.001464с = очень медленно | 50000 раз = 2.87с = быстро | PHP 7.1.2, WP 4.7.3
Хуки из функции

Использование

<?php the_meta(); ?>

Примеры

#1. Выведем метаданные поста

Для этого разместим следующий код в файле single.php после тега шаблона (функции) the_content():

<p>Мета информация о текущем посте:</p>
<?php the_meta(); ?>

Этот код выведет следующие

<p>Мета информация о текущем посте:</p>
<ul class='post-meta'>
	<li><span class='post-meta-key'>название ключа:</span> значение поля</li>
</ul>

Список изменений

С версии 1.2.0 Введена.

Код the meta: wp-includes/post-template.php WP 5.3

<?php
function the_meta() {
	$keys = get_post_custom_keys();
	if ( $keys ) {
		$li_html = '';
		foreach ( (array) $keys as $key ) {
			$keyt = trim( $key );
			if ( is_protected_meta( $keyt, 'post' ) ) {
				continue;
			}

			$values = array_map( 'trim', get_post_custom_values( $key ) );
			$value  = implode( ', ', $values );

			$html = sprintf(
				"<li><span class='post-meta-key'>%s</span> %s</li>\n",
				/* translators: %s: Post custom field name. */
				sprintf( _x( '%s:', 'Post custom field name' ), $key ),
				$value
			);

			/**
			 * Filters the HTML output of the li element in the post custom fields list.
			 *
			 * @since 2.2.0
			 *
			 * @param string $html  The HTML output for the li element.
			 * @param string $key   Meta key.
			 * @param string $value Meta value.
			 */
			$li_html .= apply_filters( 'the_meta_key', $html, $key, $value );
		}

		if ( $li_html ) {
			echo "<ul class='post-meta'>\n{$li_html}</ul>\n";
		}
	}
}

Cвязанные функции

Из метки: metadata (метаданные)

Еще из тегов шаблона: Записи: посты, страницы, ...

9 комментов
  • Ольга

    Здравствуйте! Пользуюсь версией вордпресс 4.1. Создала произвольное поле к посту, присвоила ему значение, прописала отображение его в файле page.php после

    <?php the_content(); ?>
    <?php the_meta(); ?>

    Ничего не отображается. Понять не могу почему. Хотя вроде бы на прежней версии пробовала - получалось без проблем.

    Ответить26.Дек.2014 в 19:22 #
  • Дамир

    Привет а этот фильтр:

    echo apply_filters( 'the_meta_key', "$key: $value\n", $key, $value );

    куда нужно вставить, в файл functions.php или шаблон темы?

    Допустим мне нужно чтобы
    выводила без $key и без li

    Ответить26.Июн.2015 в 13:08 #
    • campusboy3434 www.youtube.com/c/wpplus

      Привет. Да, лучше всего в functions.php, потому что там он не затеряется. Да и инициализируется он раньше. Хотя наврядли будет ошибкой, если поставить хук сразу перед тем, как надо будет вывести меты.

      Ответить27.Июн.2015 в 11:14 #
  • Дима

    Добрый день!
    Добавил фильтр в functions.php но он не взаимодействует с the_meta();

    echo apply_filters( 'the_meta_key', "<span class='post-meta-key'>$key:</span> $value\n", $key, $value );

    Он просто выводится в начале странице как пустой список.

    Не подскажите в чем может быть дело?

    Ответить27.Ноя.2015 в 00:10 #
    • Kama7641

      Вы неправильно используете фильтр. Ознакомьтесь с функцией add_filter()...

      add_filter('the_meta_key', 'my_meta', 10, 2 );
      function my_meta( $key, $value ){
      	$out = "<span class='post-meta-key'>$key:</span> $value\n";
      	return $out;
      }
      1
      Ответить27.Ноя.2015 в 06:50 #
  • Здравствуйте,
    пытаюсь решить задачку и ни как не получается, может вы мне сможете помочь?
    Необходимо осуществить вывод произвольных полей подстраниц на родительской странице, где эти метаполя (произвольное поле) должны быть ссылкой, чтобы кликнув по ней, можно было бы отсортировать подстраницы по конкретному метаполю (произвольное поле).
    К примеру:
    Это конечно же хорошо, но не получается у меня, вот и прошу помощи. Код сейчас такой:

    <div class="main border">
    <section id="gibdd-wrapper">
    	<div id="gibdd-wrapper-header">
    		<div class="gibdd-wrapper-header">
    			<header>
    				<h1><a href="<?php the_permalink(358); ?>"><?php echo get_the_title(358); ?></a></h1>
    			</header><!--. Header -->
    			<div class="gibdd-logo-wrapper">
    				<div class="gibdd-logo" style="/*width: 150px;*/">
    					<img src="<?php echo get_template_directory_uri();?>/image/gibdd/gibdd.png" alt="">
    				</div><!--. Header logo img -->
    				<div class="gibdd-logo-name">
    					<ul>
    						<li>Госавтоинспекция</li>
    						<li>г. Москва</li>
    					</ul>
    				</div><!--. Header logo name -->
    			</div><!--. Header logo img + name -->
    		</div><!--. gibdd-wrapper-header -->
    				<div class="gibdd-preview">
    					<div class="gibdd-preview">
    						<ul>
    
    		<?php
    $mypages = get_pages( array(
    	'child_of'      => $post->ID,
    	'sort_order'    => 'ASC',
    	'meta_key'      => '',
    	'meta_value '   => '',
    	) );
    foreach( $mypages as $page ) {      
    	//  $content = $page->post_content; //  публикация контента всей страницы
    		$content = $page->post_excerpt;     //  публикация отрывка (цитата) страницы
    	// пропустим страницу без контента
    	//if ( ! $content ) continue; // если $content = $page->post_excerpt; не содержит отрывка, то такую запись пропустит и она не будет выведена
    	$content = apply_filters( 'the_content', $content );
    	?>
    								<li class="gp-link">
    							<h2><a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2>
    					<div class="gibdd-adress">
    						<?php echo $content; ?>
    					</div><!--. gibdd-adress -->
    					<div>
    				<div style="min-height: 20px; background-color: green;">
    					<?php get_post_meta(); // ни как не понимаю что тут и как нужно прописать ?>
    				</div>
    			</div><!--. gp-link-tag -->
    	<?php
    };?>
    		</li><!--. gp-link -->
    				</ul>
    		</div><!--. gibdd-preview-wrapper -->
    	</div><!--. gibdd-wrapper-header -->
    </section><!--. gibdd-wrapper -->
    Ответить28.Сен.2019 в 01:52 #
  • я так понимаю, что $post_id — обязательное условие, которое нужно указать.
    Это всё прекрасно, но не могу понять как сделать так, чтобы НЕ указывать конкретный $post_id, т.к. за ранее я его не знаю.

    Как написать код, чтобы он отвечал своей цели?

    Цель такая:
    1) сделать родительскую страницу;
    2) сделать дочернюю страницу (скажем штук 20);
    3) прописать два-три мета ключа в произвольном поле, которые будут по необходимости вводиться на дочерних страницах;
    4) два-три мета ключа в произвольном поле должны высвечиваться в виде ссылок под каждой дочерней странице на родительской странице с целью возможности вывода отсортированных дочерних страниц по конкретному мета ключу.

    По пункт 4 почти всё ясно, тут нужно в свой файл функции добавить свою функцию типа the_my_meta(), в которой указать:

    $html = sprintf(
    				"<li><a href=''><span class='post-meta-key'>%s</span></a> %s</li>\n",
    				/* translators: %s: Post custom field name */
    				sprintf( _x( '%s:', 'Post custom field name' ), $key ),
    				$value
    			);

    Но какой код должен быть код чтобы, так скажем метассылка на родительской page появлялась из дочки и соответствовала этой дочке? Следовательно конструкция итоговая должна стать:

    <ul>
    	<li>
    		<h2>
    			<a href="">дочерняя страница</a>
    		</h2>
    	</li>
    	<li>описание дочерней стр. (отрывок ("цитата"))</li>
    	<li>
    		<a href="">метассылка дочерней стр.</a>
    	</li>
    </ul>
    Ответить28.Сен.2019 в 21:44 #
Здравствуйте, !     Войти . Зарегистрироваться