[label, count(): int, fetch( $offset, $limit ): array]. * Элемент: key, title, edit, view, text. * * @return array */ public static function all() { $s = YSNO_Settings::all(); $sources = array(); $types = self::post_types(); if ( $types ) { $sources['posts'] = array( 'label' => __( 'Страницы, записи и товары', 'yasno' ), 'count' => static function () use ( $types ) { $n = 0; foreach ( $types as $type ) { $n += (int) ( wp_count_posts( $type )->publish ?? 0 ); } return $n; }, 'fetch' => static function ( $offset, $limit ) use ( $types ) { $out = array(); foreach ( get_posts( array( 'post_type' => $types, 'post_status' => 'publish', 'orderby' => 'ID', 'order' => 'ASC', 'offset' => $offset, 'posts_per_page' => $limit, ) ) as $post ) { $out[] = self::post_item( $post ); } return $out; }, ); } if ( $s['menus'] ) { $sources['menus'] = array( 'label' => __( 'Меню', 'yasno' ), 'count' => static function () { return count( wp_get_nav_menus() ); }, 'fetch' => static function ( $offset, $limit ) { $out = array(); foreach ( array_slice( wp_get_nav_menus(), $offset, $limit ) as $menu ) { $titles = array(); foreach ( (array) wp_get_nav_menu_items( $menu->term_id ) as $item ) { $titles[] = $item->title; } $out[] = array( 'key' => 'menu:' . $menu->term_id, /* translators: %s: название меню */ 'title' => sprintf( __( 'Меню «%s»', 'yasno' ), $menu->name ), 'edit' => admin_url( 'nav-menus.php?action=edit&menu=' . $menu->term_id ), 'view' => '', 'text' => implode( ". \n", $titles ), ); } return $out; }, ); } if ( $s['site_title'] ) { $sources['site'] = array( 'label' => __( 'Название и описание сайта', 'yasno' ), 'count' => static function () { return 1; }, 'fetch' => static function ( $offset ) { if ( $offset > 0 ) { return array(); } return array( array( 'key' => 'site', 'title' => __( 'Название и описание сайта', 'yasno' ), 'edit' => admin_url( 'options-general.php' ), 'view' => home_url( '/' ), 'text' => get_bloginfo( 'name' ) . ". \n" . get_bloginfo( 'description' ), ), ); }, ); } /** * Источники текстов. Pro добавляет рубрики и метки, виджеты, SEO-поля, Elementor. * * @param array $sources Источники. */ return (array) apply_filters( 'ysno/sources', $sources ); } /** Выбранные типы записей, которые существуют на сайте. */ public static function post_types() { $allowed = array_keys( YSNO_Settings::available_post_types() ); return array_values( array_intersect( (array) YSNO_Settings::get( 'post_types' ), $allowed ) ); } /** Элемент проверки из записи. */ public static function post_item( WP_Post $post ) { /** * Текст записи для проверки. Pro добавляет SEO-поля, подписи картинок и данные конструкторов. * * @param string $text Текст. * @param WP_Post $post Запись. */ $text = (string) apply_filters( 'ysno/post_text', $post->post_title . ". \n" . $post->post_excerpt . "\n" . $post->post_content, $post ); return array( 'key' => 'post:' . $post->ID, 'title' => '' !== $post->post_title ? $post->post_title : __( '(без названия)', 'yasno' ), 'edit' => (string) get_edit_post_link( $post->ID, 'raw' ), 'view' => (string) get_permalink( $post ), 'text' => $text, 'type' => $post->post_type, ); } }