Учебники

Создание сообщений и страниц WordPress с помощью PHP – 101

Анимация объекта при прокрутке

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

Это может быть полезно, если:

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

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

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

if (! function_exists( 'PostCreator') ) { function PostCreator( $name = 'AUTO POST', $type = 'post', $content = 'DUMMY CONTENT', $category = array(1,2), $template = NULL, $author_id = '1', $status = 'publish') { define( POST_NAME, $name ); define( POST_TYPE, $type ); define( POST_CONTENT, $content ); define( POST_CATEGORY, $category ); define( POST_TEMPLATE, '' ); define( POST_AUTH_ID, $author_id ); define( POST_STATUS, $status ); if ($type == 'page') { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_page( $post_id ); define( POST_TEMPLATE, $template ); } else { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_post( $post_id ); } function hbt_create_post() { $post_data = array( 'post_title' => wp_strip_all_tags( POST_NAME ), 'post_content' => POST_CONTENT, 'post_status' => POST_STATUS, 'post_type' => POST_TYPE, 'post_author' => POST_AUTH_ID, 'post_category' => POST_CATEGORY, 'page_template' => POST_TEMPLATE ); wp_insert_post( $post_data, $error_obj ); } if (! isset( $post) ) { add_action( 'admin_init', 'hbt_create_post' ); return $error_obj; } } } /* All available options for PostCreator() PostCreator( 'TITLE', 'POST TYPE', 'POST CONTENT', 'POST CATEGORY', 'TEMPLATE FILE NAME', 'AUTHOR ID NUMBER', 'POST STATUS'); TITLE - HTML Stripped Out. Simple String. POST TYPE - Post type slug. Eg 'post' or 'page'. Custom Post Types are supported. POST CONTENT - Content of the Post/Page. HTML allowed. POST CATEGORY - An array of the integer ID's of the category/categories you want to link to your post TEMPLATE FILE NAME - File name of the template. Only for Pages. In the format 'file_name.php'. AUTHOR ID NUMBER - Integer value. Default is 1. POST STATUS - Available options; [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] If successful, PostCreator() returns nothing. If there is an error PostCreator() returns a WP_error object. */ PostCreator( 'My Lorem Ipsum', 'page', 'With a sizable serving of Dolor. This was created using Harri Bell-Thomas's PostCreator function.' );

ПОШАГОВОЕ РУКОВОДСТВО

Мы будем создавать PHP-функцию под названием PostCreator(), и нам потребуется, чтобы она принимала определенные параметры. Каждому параметру присвоено значение по умолчанию, поэтому технически при вызове функции вам не нужно указывать какой-либо из них, но, эй, а где в этом удовольствие?

function PostCreator( $name = 'AUTO POST', $type = 'post', $content = 'DUMMY CONTENT', $category = array(1,2), $template = NULL, $author_id = '1', $status = 'publish') { // function output here }

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

define( POST_NAME, $name ); define( POST_TYPE, $type ); define( POST_CONTENT, $content ); define( POST_CATEGORY, $category ); define( POST_TEMPLATE, '' ); define( POST_AUTH_ID, $author_id ); define( POST_STATUS, $status );

Хорошо, пока все хорошо. Теперь я включил некоторую проверку, чтобы предотвратить создание дублирующих сообщений / страниц (что является кошмаром, поверьте мне!). Эта проверка проверяет, существует ли уже сообщение / страница с таким именем. Если это так, он не создает новый, а если нет, он создает его для вас.

Причина, по которой я решил проверить заголовок сообщения, заключается в том, что это все, что требуется WordPress для создания страницы (остальное создается автоматически). Другие способы выполнения этой проверки включают проверку «слагов» или идентификаторов сообщений. Обо всем этом мы поговорим в следующем уроке.

Это особенно полезно, если публикация / страница требуется вашему плагину или теме. Сначала я разработал это для одного из своих плагинов, потому что он требовал, чтобы страница присутствовала с определенным шаблоном страницы. С помощью этой функции я просто сохранил PostCreator () как WordPress admin_init, что означает, что если кто-то попытается удалить его (как они смеют!), Он будет немедленно воссоздан, чтобы предотвратить проблемы с остальной частью плагина.

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

Теперь вернемся к проверке. Вот следующий фрагмент кода.

if ($type == 'page') { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_page( $post_id ); define( POST_TEMPLATE, $template ); } else { $post = get_page_by_title( POST_NAME, 'OBJECT', $type ); $post_id = $post->ID; $post_data = get_post( $post_id ); }

Так что, черт возьми, здесь происходит?

Что ж, по сути, это один и тот же процесс, повторяемый дважды. Я делаю это из-за того, что посты и страницы обрабатываются немного по-разному. Кроме того, константа POST_TEMPLATE определяется только в том случае, если вы пытаетесь создать страницу, потому что только страницы могут принимать этот параметр (т. Е. Он будет проигнорирован, если вы пытаетесь создать стандартное сообщение).

В первой строке предложения IF (его техническое название – «аподозис», если вы еще не знали) переменная $ post определяется. Если есть сообщение / страница с тем же именем, которое пытается создать, тогда $ post заполняется данными существующей записи (как объект, а не массив, но это можно изменить, если это абсолютно необходимо). Эта переменная используется для проверки уникальности вашего заголовка. Следующие две строки я включил, потому что, опять же, они очень полезны, если вы хотите расширить эту функцию. Примером этого может быть обновление существующей публикации, если она уже существует.

Далее идет наша вложенная функция, которая будет добавлена ​​к хуку admin_head. Вот;

function hbt_create_post() { $post_data = array( 'post_title' => wp_strip_all_tags( POST_NAME ), 'post_content' => POST_CONTENT, 'post_status' => POST_STATUS, 'post_type' => POST_TYPE, 'post_author' => POST_AUTH_ID, 'post_category' => POST_CATEGORY, 'page_template' => POST_TEMPLATE ); wp_insert_post( $post_data, $error_obj ); }

Просто это использование встроенной функции WordPress (wp_insert_post) для создания нашей публикации / страницы. Мы заполняем $ post_data массивом наших параметров (здесь вы можете увидеть наши константы). Он создается, и в случае ошибки генерирует логическое значение $ error_obj. ИСТИНА = проблема. FALSE = все в порядке. Последнее, что нужно сделать, это запустить предыдущую функцию в голове администратора, но только если она проходит проверку, и вернуть объект ошибки.

if (! isset( $post) ) { add_action( 'admin_init', 'hbt_create_post' ); return $error_obj; }

Большой! Теперь мы создали нашу потрясающую функцию, давайте воспользуемся ею!

ПРИМЕНЕНИЕ

Просто включите функцию PostCreator () и запустите ее.

Это будет работать с использованием значений по умолчанию, но что, если нам нужна настраиваемость? Затем мы используем наши параметры.

PostCreator( 'TITLE', 'POST TYPE', 'POST CONTENT', 'POST CATEGORY', 'TEMPLATE FILE NAME', 'AUTHOR ID NUMBER', 'POST STATUS' );

При использовании всех этих параметров используйте апострофы. Убедитесь, что если вы хотите использовать апостроф (кроме окружающих сами параметры), вы ставите перед ним обратную косую черту. Например;

PostCreator( 'Alex's Post' );

Параметр TITLE принимает строковое значение. Это лишено HTML-тегов.

Параметр POST TYPE принимает, например, заголовок типа сообщения; “сообщение” или “страница”. Поддерживаются пользовательские типы сообщений.

PostCreator( 'Alex's Post', 'page' );

POST CONTENT ‘принимает строковое значение. Это будет содержание созданного поста / страницы. HTML здесь разрешен.

PostCreator( 'Alex's Post', 'page', 'The force is strong with this one…' );

КАТЕГОРИЯ POST принимает массив целых чисел. Целые числа соответствуют идентификатору категории / категорий, связанных с сообщением / страницей.

PostCreator( 'Alex's Post', 'page', 'The force is strong with this one…', array( 1, 2) );

TEMPLATE FILE NAME – это строковое значение, определяющее желаемый шаблон страницы вашей новой страницы. Это работает только для страниц. Формат будет; ‘имя_файла.php’.

PostCreator( 'Alex's Post', page', 'The force is strong with this one…', array( 1, 2 ), 'fullwidth_page.php' );

ИДЕНТИФИКАЦИОННЫЙ НОМЕР АВТОРА – это целое число ID автора.

PostCreator( 'Alex's Post', 'page', 'The force is strong with this one…', array( 1, 2 ), 'fullwidth_page.php', '1' );

POST STATUS позволяет вам определить состояние созданного сообщения / страницы. По умолчанию он «опубликован».

Доступные Варианты; [‘черновик’ | ‘опубликовать’ | «в ожидании» | «будущее» | «частный» | пользовательский зарегистрированный статус]

PostCreator( 'Alex's Post', 'page', 'The force is strong with this one…', array( 1, 2 ), 'fullwidth_page.php', '1', 'publish' );

ЗАКЛЮЧЕНИЕ

WordPress – исключительно мощный инструмент, но временами он определенно может быть непослушным. Я надеюсь, что вы найдете этот простой фрагмент полезным, возможно, вы узнаете кое-что в процессе. Следите за новостями в следующем, где я собираюсь преобразовать то, что мы уже сделали в этой статье, в класс PHP, добавив больше функциональности и стабильности. Для предварительного просмотра ознакомьтесь с кодом на Github: PostController

Если у вас есть какие-либо вопросы, просто задавайте их в разделе комментариев ниже.

Источник записи: https://www.wpexplorer.com

Похожие сообщения
Учебники

Как отображать похожие сообщения по категориям в WordPress

Учебники

Как получить отличный поиск для вашего блога WordPress

Учебники

Как начать успешный блог о еде с WordPress

Учебники

Как вручную загрузить шрифты Google в WordPress

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

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