wp_insert_post() — функция позволяет создать новую запись / страницу или обновить уже существующую. Wordpress post


get_post() - функция WordPress

Возвращает всю инфу, содержащуюся в базе данных (таблица wp_posts) об указанном в параметрах посте (любого типа, то есть это может быть страница page, запись post или какой-либо произвольный тип записи).

get_post( $post = null, $output = OBJECT, $filter = 'raw' );
$post (целое число|объект) ID конкретного поста или его объект, по умолчанию — текущий пост $output (строка) формат получаемых данных: $filter (строка)

Параметры объекта поста WP_Post

То есть в этом случае $output = OBJECT. Каждый из параметров соответствует столбцу из таблицы MySQL.

ID (целое число) ID поста post_author (целое число) ID автора поста post_date (строка) дата и время публикации поста в формате YYYY-MM-DD HH:MM:SS post_date_gmt (строка) дата и время (GMT) публикации поста в формате YYYY-MM-DD HH:MM:SS post_content (строка) контент (содержимое) поста post_title (строка) заголовок post_category (строка) по идее это ID рубрики, к которой относится пост, однако с версии WordPress 2.1 всегда равно 0, чтобы определить рубрики, воспользуйтесь функцией get_the_category(). post_excerpt (строка) содержимое поля «Цитата» post_status (строка) статус поста comment_status (строка) настройки комментирования ping_status (строка) разрешены ли трэкбэки и пингбэки post_password (строка) пароль к посту post_name (строка) ярлык поста to_ping (строка) URL для пинга pinged (строка) URL, которые уже пингнуты post_modified (строка) дата и время последнего обновления(редактирования) поста в формате YYYY-MM-DD HH:MM:SS post_modified_gmt (строка) дата и время GMT последнего обновления(редактирования) поста в формате YYYY-MM-DD HH:MM:SS post_content_filtered (строка) post_parent (целое число) ID родительского поста (например для вложений или страниц) guid (строка) ссылка на пост вида https://misha.blog/?p=8542 menu_order (целое число) post_type (строка) тип поста post_mime_type (строка) MIME тип (для вложений) comment_count (целое число) количество комментариев к посту

Теперь возьмем для примера пост про WP_Query и выведем всю инфу о нем. Если к параметру не оставлено комментариев в этом листинге кода — значит он пустой для данного поста, post_content я разумеется сократил.

echo $post->ID; // 1285 echo $post->post_author; // 1 echo $post->post_date; // 2012-12-09 05:55:07 echo $post->post_date_gmt; // 2012-12-09 01:55:07 echo $post->post_content; // Про класс WP_Query можно сказать в двух словах - бла бла бла echo $post->post_title; // WP_Query(), описание класса, параметры print_r( $post->post_category ); // Array ( [3] => 3 ) echo $post->post_excerpt; echo $post->post_status; // publish echo $post->comment_status; // open echo $post->ping_status; // open echo $post->post_password; echo $post->post_name; // wp_query echo $post->to_ping; echo $post->pinged; echo $post->post_modified; // 2012-12-09 12:46:24 echo $post->post_modified_gmt; // 2012-12-09 08:46:24 echo $post->post_content_filtered; echo $post->post_parent; // 0 echo $post->guid; // https://misha.blog/blog/?p=1285 echo $post->menu_order; // 0 echo $post->post_type; // post echo $post->post_mime_type; // echo $post->comment_count; // 18

Примеры использования

Предлагаю разобраться с форматом вывода. Итак, зная ID поста, выведем например его статус и заголовок. Пример, когда возвращается объект:

$my_post = get_post( 5 ); echo $my_post->post_status; echo $my_post->post_title;

Ассоциативный массив:

$my_post = get_post( 5, ARRAY_A ); echo $my_post['post_status']; echo $my_post['post_title'];

В случае с нумерованным массивом нужно заранее знать индексы соответствующих значений. Их можно выяснить например при помощи php-функции print_r().

$my_post = get_post( 5, ARRAY_N ); echo $my_post[7]; echo $my_post[11];

Важно: указывать ID поста в виде целого числа стало возможно только после версии WordPress 3.5. До этого ID поста нужно было передавать только в переменной, то есть:

$post = 5; $my_post = get_post( $post );

misha.blog

Произвольные типы записей в WordPress

Блог  /  WordPress  /  Типы постов в WordPress. Добавление собственных произвольных типов постов.

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

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

Если вы уже более или менее знакомы с типами постов в WordPress и их созданием, читайте про их вывод в цикле в статье про WP_Query и про файлы темы, используемые для них в качестве шаблонов.

Также вы можете глянуть этот обзорный видеоурок:

Стандартные типы записей WordPress

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

Что общего у всех этих типов? Все они являются элементами содержимого сайта, имеют какие-либо параметры. Информацию о них можно получить или вывести, например в виде объекта поста WP_Post.

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

Записи

Если на вашем сайте присутствует блог, то этот стандартный тип поста очень удобно использовать в качестве статей на блоге. Записи по умолчанию выводятся на главных страницах многих тем WordPress в порядке даты публикации (по убыванию). Они также попадают в RSS-ленту сайта.

тип постов Записи

Шаблоном страницы записи является файл темы single.php.

Страницы

О да! Страницы — это потрясающая штука! В целом они похожи на записи, но имеют несколько уникальных особенностей. Итак, страницы:

тип постов Страницы

В качестве шаблона страницы может быть задействован один из следующих файлов. Файлы указаны в порядке приоритета задействования. Т.е., если файла под номером 1 не существует, то будет задействован файл под номером 2.

  1. {ваш_шаблон}.php файл с произвольным названием, будет использоваться как шаблон страницы, если выбран на странице редактирования страницы.
  2. page-{ярлык_страницы}.php
  3. page-{ID_страницы}.php
  4. page.php

Вложения

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

тип поста Вложения

Редакции

Редакции записей — это черновики, которые автоматически сохраняются в процессе редактирования записей (также могут быть использованы и в других типах постов, не только в post). И, если вы вдруг написали в своей статье что-то не то, вы всегда cможете восстановить её старую версию из одной из редакций.

тип поста Редакции

Метабокс с редакциями вы найдёте на странице редактирования любой записи.

Элементы меню

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

Регистрация пользовательского типа поста

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

В качестве примера давайте добавим «Функции WordPress». То есть, нам нужно, чтобы у функций был собственный шаблон страниц, собственные категории, ну, и если мы будем постить по 3 функции в день (к примеру), то нам тем более не надо захламлять RSS-канал.

Всего будет 4 шага создания типа поста. На самом деле, чтобы всё заработало, достаточно и одного-двух этапов, но нам ведь надо, чтобы всё было на высшем уровне.

Шаг 1. register_post_type()

Всё начинается с функции register_post_type(). Пока что вы можете использовать код, приведённый ниже, подставив свои собственные значения параметров в массивы.

add_action( 'init', 'true_register_post_type_init' ); // Использовать функцию только внутри хука init   function true_register_post_type_init() { $labels = array( 'name' => 'Функции', 'singular_name' => 'Функцию', // админ панель Добавить->Функцию 'add_new' => 'Добавить функцию', 'add_new_item' => 'Добавить новую функцию', // заголовок тега <title> 'edit_item' => 'Редактировать функцию', 'new_item' => 'Новая функция', 'all_items' => 'Все функции', 'view_item' => 'Просмотр функции на сайте', 'search_items' => 'Искать функции', 'not_found' => 'Функций не найдено.', 'not_found_in_trash' => 'В корзине нет функций.', 'menu_name' => 'Кодекс WP' // ссылка в меню в админке ); $args = array( 'labels' => $labels, 'public' => true, 'show_ui' => true, // показывать интерфейс в админке 'has_archive' => true, 'menu_icon' => get_stylesheet_directory_uri() .'/img/function_icon.png', // иконка в меню 'menu_position' => 20, // порядок в меню 'supports' => array( 'title', 'editor', 'comments', 'author', 'thumbnail') ); register_post_type('functions', $args); }

Важно: в качестве имени типа поста (первый аргумент функции) нельзя использовать следующие слова: post, page, attachment, revision, nav_menu_item, action, order, theme. Помню случай, когда я пытался зарегистрировать тип поста order и не мог понять, почему ничего не работает.

Этот пример очень упрощён. На моем блоге вы также найдете полную документацию функции register_post_type() с подробным описанием её параметров и их значений.

Если не знаете, куда вставлять код из этого поста, вставляйте всё в файл functions.php. Таких файлов может быть несколько, нам нужен тот, который находится непосредственно в папке с текущей темой.

В результате получаем:

Результат действия функции register_post_type()

Круто, да?

Шаг 2. Тексты уведомлений для типа постов

В принципе обычно бывает достаточно первого и четвертого шага, однако, если вы всерьез занялись настройкой админки, то шаги 2 и 3 тоже важны.

Наверное вы понимаете, о каких уведомлениях идет речь. Это сообщения, которые появляются в верхней части экрана при например сохранении или обновлении поста.

Сообщение, появляющееся при обновлении поста данного типа

Если вы пропустите этот шаг, то по умолчанию будут использоваться уведомления из записей типа post.

add_filter( 'post_updated_messages', 'true_post_type_messages' );   function true_post_type_messages( $messages ) { global $post, $post_ID;   $messages['functions'] = array( // functions - название созданного нами типа записей 0 => '', // Данный индекс не используется. 1 => sprintf( 'Функция обновлена. <a href="%s">Просмотр</a>', esc_url( get_permalink($post_ID) ) ), 2 => 'Параметр обновлён.', 3 => 'Параметр удалён.', 4 => 'Функция обновлена', 5 => isset($_GET['revision']) ? sprintf( 'Функция восстановлена из редакции: %s', wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, 6 => sprintf( 'Функция опубликована на сайте. <a href="%s">Просмотр</a>', esc_url( get_permalink($post_ID) ) ), 7 => 'Функция сохранена.', 8 => sprintf( 'Отправлено на проверку. <a target="_blank" href="%s">Просмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), 9 => sprintf( 'Запланировано на публикацию: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Просмотр</a>', date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), 10 => sprintf( 'Черновик обновлён. <a target="_blank" href="%s">Просмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), );   return $messages; }

Шаг 3. Вкладка «Помощь»

Вкладка «Помощь» находится в правой верхней части экрана. Для нашего типа поста её ещё пока что нет, но вы сможете найти её на странице редактирования записей например.

вкладка Помощь в верхней правой части экрана

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

Следующий код будет работать в версиях WordPress 3.3 и выше. Более старые версии WordPress в данном случае рассматривать не вижу смысла.

function true_post_type_help_tab() {   $screen = get_current_screen();   // Прекращаем выполнение функции, если находимся на страницах других типов постов if ( 'functions' != $screen->post_type ) return;   // Массив параметров для первой вкладки $args = array( 'id' => 'tab_1', 'title' => 'Обзор', 'content' => '<h4>Обзор</h4><p>Содержимое первой вкладки.</p>' );   // Добавляем вкладку $screen->add_help_tab( $args );   // Массив параметров для второй вкладки $args = array( 'id' => 'tab_2', 'title' => 'Доступные действия', 'content' => '<h4>Доступные действия с типом постов &laquo;' . $screen->post_type . '&raquo;</h4><p>Содержимое второй вкладки</p>' );   // Добавляем вторую вкладку $screen->add_help_tab( $args );   }   add_action('admin_head', 'true_post_type_help_tab');

При использовании этого кода получаем:

содержимое вкладки Помощь

Шаг 4. Обновление постоянных ссылок

Завершающий штрих. Если на вашем сайте включены пермалинки, то, для того, чтобы страницы типа поста корректно отображались (и отображались вообще), переходим в Параметры > Постоянные ссылки и, ничего не меняя, нажимаем «Сохранить изменения».

Смотрите также

misha.blog

get_posts() - вывод постов в WordPress

Блог  /  Кодекс WordPress  /  get_posts() — позволяет получить массив из объектов постов, соответствующих заданным параметрам

Функция возвращает массив, содержащий объекты постов (записей, страниц, вложений, произвольных типов постов или всё сразу), соответствующие заданным параметрам. Прежде всего хочу сказать — если вам нужно вывести посты, то рассмотрите использование WP_Query для этих целей.

Имеет следующие значения параметров по умолчанию:

$params = array( 'post_type' => 'post', // тип постов - записи 'numberposts' => 5, // получить 5 постов, можно также использовать posts_per_page 'orderby' => 'date', // сортировать по дате 'order' => 'DESC', // по убыванию (сначала - свежие посты) 'suppress_filters' => true // 'posts_*' и 'comment_feed_*' фильтры игнорируются );

Соответствия параметров get_posts() и WP_Query

Любой из параметров WP_Query прекрасно подойдет и для get_posts(). Кроме того, функция имеет несколько эквивалентных параметров:

Параметр get_posts() Его эквивалент в WP_Query
numberposts posts_per_page
category cat
include post__inТакже устанавливает значение posts_per_page равным количеству перечисленных постов.
exclude post__not_in

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

Примеры использования get_posts()

Для начала самый простой пример — выведем ссылки на 5 последних опубликованных постов на блоге. Для получения URL постов нам также потребуется функция get_permalink().

$recent_posts_array = get_posts(); // получаем массив постов foreach( $recent_posts_array as $recent_post_single ) : // для каждого поста из массива echo '<a href="' . get_permalink( $recent_post_single ) . '">' . $recent_post_single->post_title . '</a>'; // выводим ссылку endforeach; // конец цикла

Аналогичный пример, но с использованием функция the_permalink() (для вывода урл) и the_title() (для вывода заголовков).

<?php $params = array( 'posts_per_page' => 5 // этот параметр не обязателен, так как get_posts() по умолчанию и так выводит 5 постов ); $recent_posts_array = get_posts( $params ); foreach( $recent_posts_array as $recent_post_single ) : setup_postdata( $recent_post_single ); // устанавливает $post (глобальная переменная - объект поста) ?><a href="<?php the_permalink() /* URL записи */ ?>"><?php the_title() /* выводим заголовок */ ?></a><?php endforeach; wp_reset_postdata(); // сбрасывает $post

Больше примеров смотрите здесь.

misha.blog

как создать или обновить пост в WordPress

Блог  /  Кодекс WordPress  /  wp_insert_post() — функция позволяет создать новую запись / страницу или обновить уже существующую

Функция вставляет посты (записи, страницы, произвольные типы постов) в базу данных WordPress. В случае успеха возвращает ID поста, в случае неудачи либо 0 либо объект WP_Error ( в зависимости от значения второго параметра ).

Если же вам нужно сделать несколько записей, то просто запустите эту функцию в цикле PHP.

wp_insert_post( $postarr, $wp_error = false )
$postarr (массив) содержит информацию о посту. ID ID поста, который нужно обновить. При создании нового поста этот параметр указывать не нужно. post_content Содержимое поста (контент). post_name Ярлык (если не указан, то берется из заголовка). post_title Собственно заголовок. post_status Статус поста.

Если установлено future (запланированная публикация в будущем), то время публикации post_date (этот параметр дан ниже) должно быть соответствующим.

По умолчанию — draft, то есть, если вы не укажете этот параметр, то пост создастся как черновик.

post_type Тип поста. Например post — запись (по умолчанию), page — страница. post_author Автор поста, а точнее его ID (по умолчанию — текущий пользователь, который авторизован). ping_status Пингбэки и трэкбеки:

По умолчанию — значение get_option('default_ping_status') (находится в Настройки > Обсуждение, скриншот ниже).

Значение ping_status по умолчанию в функции wp_insert_post() post_parent ID родительского поста. menu_order Порядок в меню (применимо для страниц и не применимо для записей). to_ping Список URL сервисов обновления, разделенных пробелом, либо каждый URL — с новой строки (нужны для ускоренной индексации постов, подробнее про сервисы обновления в Настройки > Написание). Пример:
http://rpc.weblogs.com/RPC2 http://bing.com/webmaster/ping.aspx
pinged Список URL сервисов обновления, на которые уже был отправлен запрос. post_password Пароль к посту. post_excerpt Поле «Цитата», анонс поста. post_date Когда пост был (или должен быть) опубликован Y-m-d H:i:s, по умолчанию текущая дата. post_date_gmt в GMT. comment_status Разрешить open или запретить closed комментирование этого поста. post_category, tags_input, tag_input Для того, чтобы присвоить посту рубрики, метки или элементы какой-либо произвольной таксономии, используйте функцию wp_set_object_terms(). page_template Название файла шаблона, например template-portfolio.php.

Если тип поста — не страницы page, значение этого параметра будет проигнорировано.

$wp_error true — возвращать объект WP_Error в случае неудачи (по умолчанию — false).

Примеры

Создаем пост и присваиваем ему рубрики и метки

$my_postarr = array( 'post_title' => 'Новый пост', 'post_content' => 'Это мой новый пост.', // контент 'post_status' => 'publish' // опубликованный пост );   // добавляем пост и получаем его ID $my_post_id = wp_insert_post( $my_postarr );   // присваиваем рубрику к посту (ссылка на документацию wp_set_object_terms() дана чуть выше) wp_set_object_terms( $my_post_id, 5, 'category' );   // присваиваем метки wp_set_object_terms( $my_post_id, array(7, 8), 'post_tag' );

Как изменить заголовок поста через функцию?

Этим способом вы также сможете изменить и другие параметры поста, упомянутые в статье.

$updated_post_arr = array( 'ID' => 500, // допустим, ID поста, заголовок которого нужно изменить, равен 500 'post_title' => 'Новый заголовок' // заголовок );   // обновляем пост (все остальные его параметры останутся прежними) wp_insert_post( $updated_post_arr );

misha.blog


Смотрите также

Prostoy-Site | Все права защищены © 2018 | Карта сайта