• Как реализовать функцию проверки подключения файла?

    coderisimo
    @coderisimo
    Общая идея :

    function files_connection( $paths = [] ) {
      var_dump($paths);
    $allFilesAvailable = true;  //  вот здесь вы отслеживаете наличие всех файлов
      foreach ( $paths as $path_file ) {
        $file_name = end( explode( '/', $path_file ) );
        if ( !file_exists( __DIR__ . $path_file ) ) {
        $allFilesAvailable = false; // если хотя-бы одного нет - дальше этого скрипта дело не пойдет
    
          echo "
            <div class=\"alert_danger_file_connection\">
              <h1>Ошибка при подключении файла!</h1>
              <p>Не удалось подключить файл: <mark>{$path_file}</mark></p>
              <p>Проверьте наличие файла по указанному пути: <mark>{$file_name}</mark></p>
            </div>
          ";
      
        } else {
    
    if( $allFilesAvailable)
          include_once( __DIR__ . $path_file );
        }
      }
      
      
      if(!$allFilesAvailable)// УПС!
          exit;
    }
    Ответ написан
    2 комментария
  • Вывод предупреждения, что для работы собственного плагина необходимо наличие плагина стороннего. Как реализовать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    ACF сам себя проверяет вот таким образом:
    if ( ! class_exists( 'ACF' ) ) :
        // ...
    endif;

    И это наиболее адекватный способ. А вот is_plugin_active() я бы не советовал использовать - ACF может работать как обычная PHP-библиотека, установленная с помощью того же Composer, и тогда она не будет в списке плагинов.
    Ответ написан
    7 комментариев
  • Как изменить структуру (разметку) паганации?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    За неимением готовых решений пришлось слепить свое :).

    Может кому пригодиться, в принципе, если скорректировать массив $replaceто можно реализовать любую разметку пагинации.
    функция ya_custom_navigation

    function ya_custom_navigation() {
    	$nav     = get_the_posts_pagination();
    	$search  = [
    		'screen-reader-text',
    		'<nav class="navigation pagination" role="navigation">',
    		'<div class="nav-links">',
    		'</div>',
    		'<a class=\'page-numbers\'',
    		'<a class="prev page-numbers"',
    		'<a class="next page-numbers"',
    		'</a>',
    		'<span aria-current=\'page\' class=\'page-numbers current\'>',
    		'<span class="page-numbers dots">',
    		'</span>',
    		';<span class="sr-only">(current)</span></span></li>'
    	];
    	$replace = [
    		'screen-reader-text small-title',
    		'<nav>',
    		'<ul class="pagination justify-content-center">',
    		'</ul>',
    		'<li class="page-item"><a class="page-link"',
    		'<li class="page-item"><a class="page-link"',
    		'<li class="page-item"><a class="page-link"',
    		'</a></li>',
    		'<li class="page-item active"><span aria-current="page" class="page-link">',
    		'<li class="page-item disabled"><span class="page-link">',
    		'<span class="sr-only">(current)</span></span></li>',
    		';</span></li>'
    	];
    	$nav  = str_replace( $search, $replace, $nav );
    	return $nav;
    }



    Из стандартной html разметки:
    <nav class="navigation pagination" role="navigation">
        <h2 class="screen-reader-text">Навигация по записям</h2>
        <div class="nav-links">
            <span aria-current='page' class='page-numbers current'>1</span>
            <a class='page-numbers' href='http://ya.loc/blog/page/2/'>2</a>
            <span class="page-numbers dots">&hellip;</span>
            <a class='page-numbers' href='http://ya.loc/blog/page/4/'>4</a>
            <a class="next page-numbers" href="http://ya.loc/blog/page/2/">Далее</a></div>
    </nav>


    Делает, разметку, согласно разметки bootstrap 4.3:
    <nav>
        <h2 class="screen-reader-text small-title">Навигация по записям</h2>
        <ul class="pagination justify-content-center">
            <li class="page-item active">
                <span aria-current="page" class="page-link">1<span class="sr-only">(current)</span></span>
            </li>
            <li class="page-item">
                <a class="page-link" href='http://ya.loc/blog/page/2/'>2</a>
            </li>
            <li class="page-item disabled">
                <span class="page-link">&hellip;</span>
            </li>
            <li class="page-item">
                <a class="page-link" href='http://ya.loc/blog/page/4/'>4</a>
            </li>
            <li class="page-item">
                <a class="page-link" href="http://ya.loc/blog/page/2/">Далее</a>
            </li>
        </ul>
    </nav>


    5d45aa28eae8b174933952.png
    Ответ написан
    Комментировать
  • Не корректно отрабатывает отчистка wp_terms при удаление плагина. Как исправить?

    yaleksandr89
    @yaleksandr89
    PHP developer
    Попробуй такой вариант:
    1. Сначала выполнить удаление записей:
    *функция удаления записей по post_typy*

    2. Первые два запроса к таблице 'term_taxonomy' перемести в самый низ:
    ...
    
            $wpdb->query("DELETE FROM $terms WHERE term_id IN (SELECT term_id FROM $term_taxonomy WHERE count = 0 )");
            $wpdb->query("DELETE FROM $term_taxonomy WHERE term_id NOT IN (SELECT term_id FROM $terms");
            $wpdb->query("DELETE FROM $term_relationships WHERE term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM $term_taxonomy)");
    
            $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='rooms'");
            $wpdb->query("DELETE FROM $term_taxonomy WHERE taxonomy='floors'");
    }


    Ну и вызови их, сначала
    remove_type_flats(), потом drop_custom_table().

    Должно сработать.
    Ответ написан
    1 комментарий
  • Как связать events и single-events (Иерархия шаблонов)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    PHP developer
    Нашел решение, может кому-то ещё пригодиться. Мой метод будет работать только в одном случае иные варианты исключены (это касается привязки не только по слагу, но и по ID).

    Решение: создать фильтр через "template_include"

    Исходные данные: в папке /calendar/ лежат два файла:
    • events.php - выводит общий список постов произвольного типа записей events
    • event.php - выводит конкретное событие


    add_filter('template_include', 'my_template');
    function my_template($template)
    {
    global $post;
    if( $post->post_type == 'events' ){
    return get_stylesheet_directory() . '/calendar/event.php';
    }
    return $template;
    }
    Ответ написан
    Комментировать
  • Как добавить поля созданные в ACF в REST (маршруты)?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Здравствуйте.

    Не сталкивался с такой задачей, но, возможно, поможет плагин ACF to REST API, если ещё не пробовали.
    Ответ написан
    2 комментария
  • Вывести данные по БД у произвольного типа данных?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Здравствуйте.

    Примерно так:
    $events = new WP_Query( array( 'post_type' => 'events', 'posts_per_page' => -1 ) );
    while( $events->have_posts() ) {
        $events->the_post();
    
        $title = get_the_title();
        $status = get_post_status( get_the_ID() );
        $date = get_the_date();
    }
    Ответ написан