Intereting Posts
Нефильтрованный html с update_post_meta Где подключить действие моего плагина WordPress Page Reload Выполняется навсегда при разработке темы Как использовать функцию темы в пост / странице? обновить категорию должности в новой таблице по частой смене категории Передайте один и тот же объект нескольким виджетам в шаблоне с одним запросом WP Walker с использованием пользовательских классов CSS Как показать аватар пользователя в панели уведомлений buddypress в верхнем меню? Fetch / Filter Items в RSS-канале с помощью другого параметра. Как сделать эскизы загруженных анимированных gif-файлов НЕ анимированными Как добавить значение custom_meta_box_id? Как отобразить содержимое тега пользовательской почты? Ползунок из пользовательского типа сообщения Как показать роль пользователя в author.php Запросить сообщения и отобразить все даты в поле повторителя в хронологическом порядке

Автоматически добавлять <! – nextpage -> после X числа абзацев

Возможно ли автоматическое добавление <!--nextpage--> после X числа абзацев?

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

Концепт

Добавление чего-то к контенту во время сохранения и рассмотрение всех возможных возможностей MarkUp – непростая задача. Я немного поиграл с ним и решил, что наилучшим вариантом будет использование класса PHP native \DOMDocument для анализа содержимого, определения абзаца и добавления к нему комментария HTML. Это намного надежнее, чем использование регулярных выражений и намного лучшая производительность.

Настройка плагина

Во-первых, плагин использует Dependency Injection для развязки классов. Если вам нужно изменить выход (измените количество абзацев, вставьте какой-то другой комментарий, например, разрыв строки или что-то из короткого кода и т. Д.), Вам нужно будет вставить и отредактировать аргументы для инициализированного класса Parser изнутри Controller .

Если вы хотите вставить некоторый нормальный HTML (например, объявление после абзаца X), вам нужно будет перейти в Parser и удалить следующую строку:

 $comment = $this->dom->appendChild( new \DOMComment( $this->tag ) ); 

а затем замените $comment в следующей строке $this->tag . Затем вы можете использовать обычные HTML-теги, текст или что-то еще.

Для более сложных вещей вам нужно будет использовать DOMDocument и аналогичные объекты. Пожалуйста, обратитесь к php.net для получения дополнительной информации.

Заметки

Следующий плагин работает только с PHP 5.3+. Если вы получили более раннюю версию, она просто не будет активирована и вместо этого отобразит экран WP die.

Плагин

 <?php namespace WPSE\NextpageParagraph107787; defined( 'ABSPATH' ) OR exit; /** * Plugin Name: (#107787) Nextpage after X paragraphs * Plugin URl: http://wordpress.stackexchange.com/questions/107787 * Description: <strong>Needs PHP 5.3+!</strong> Adds a <code><!--nextpage--></code> tag after X paragraphs. * Author: Franz Josef Kaiser * Author URl: http://unserkaiser.com * License: MIT */ \add_action( 'init', array( __NAMESPACE__.'\Controller', 'init' ) ); class Controller { protected static $instance = null; public static function init() { null === self::$instance AND self::$instance = new self; return self::$instance; } protected function __construct() { $parser = new Parser(); $parser->setTag( 'nextpage' ); $parser->setTagAmount( 5 ); \add_action( 'load-post.php', array( $parser, 'onSave' ) ); \add_action( 'load-post-new.php', array( $parser, 'onSave' ) ); } } class Parser { private $dom = null; private $tag = null; private $amount = null; public function __construct( $tag = null, $paragraph_number = null ) { null === $this->dom AND $this->dom = new \DOMDocument(); } public function setTag( $tag ) { $this->tag = $tag; } public function setTagAmount( $amount ) { $this->amount = $amount; } public function onSave( $post_id ) { if ( empty( $_POST['content'] ) ) return; $this->dom->loadHTML( \wpautop( $_POST['content'] ) ); $paragraph = $this->dom->getElementsByTagName( 'p' ); $content = null; $i = 1; foreach ( $paragraph as $p ) { $content .= $this->dom->saveHTML( $p ); if ( $this->amount === $i++ AND $this->amount < $paragraph->length ) { $comment = $this->dom->appendChild( new \DOMComment( $this->tag ) ); $content .= $this->dom->saveHTML( $comment ); } } // Add to the HTTP $_POST global $_POST['content'] = $content; } } \register_activation_hook( __FILE__, array( __NAMESPACE__.'\Setup', 'onActivation' ) ); \register_deactivation_hook( __FILE__, array( __NAMESPACE__.'\Setup', 'onDeactivation' ) ); \register_activation_hook( __FILE__, array( __NAMESPACE__.'\Setup', 'onUninstall' ) ); class Setup { public function onActivation() { if ( ! current_user_can( 'activate_plugins' ) ) return; $plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : ''; check_admin_referer( "activate-plugin_{$plugin}" ); // do stuff } public function onDeactivation() { if ( ! current_user_can( 'activate_plugins' ) ) return; $plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : ''; check_admin_referer( "deactivate-plugin_{$plugin}" ); // do stuff } public function onUninstall() { if ( ! current_user_can( 'activate_plugins' ) ) return; check_admin_referer( 'bulk-plugins' ); if ( __FILE__ != WP_UNINSTALL_PLUGIN ) return; // do stuff } }