Поддержка Проблемы и решения Хранение данных в wp_posts и wp_postmeta

Просмотр 15 ответов — с 91 по 105 (всего 145)
  • Модератор Yuri

    (@yube)

    определить id метки через её слаг или название?

    Search

    p.s. Это, кстати, к распространенным вопросам «зачем знать терминологию?» и «нужно ли учить в школе английский?» 🙂

    • Ответ изменён 3 года, 10 месяцев назад пользователем Yuri. Причина: p.s

    @yube , в очередной раз благодарю Вас. Подскажите ещё, пожалуйста, в параметрах шорт-кода можно ведь указывать множественные значения, т.е.
    [result_tab category=’heat’ area_type=‘area_1, area_2, area_3’] ?
    Тогда код примет вид:

    $c = shortcode_atts( array(
            'category' => '',
            'area_type' => array()
        ), $atts);
        extract($c);

    Верно или все же я допустил ошибку ?

    @yube , извините ещё раз, мне уже становится стыдно… можно ещё вашего совета: шорт-код, про множественные значения которого я задавал вопрос выше, стал очень большим (около 2000 строк) — и в результате functions.php моей темы вырос до 3000 строк. Это очень большой размер для functions.php ? и можно ли данный шорт-код, который будет использоваться редко, оформить в виде отдельного плагина, в котором и будет только этот огромный шорт-код ?
    ps ещё раз извините за беспокойство

    Модератор Yuri

    (@yube)

    до 3000 строк

    Не так уж и много.

    и можно ли данный шорт-код, который будет использоваться редко, оформить в виде отдельного плагина

    Конечно.

    @yube , извините ещё раз за беспокойство, по поводу вывода информации в файлы *.csv Вы писали ранее:

    Да почти так же, как и для вывода в html. Только с заголовками

    header("Content-type: text/csv; charset=UTF-8");
    header("Content-Disposition: attachment; filename=export.csv");

    Я формирую файл с помощью fputcsv() с сепаратором ;, но на выходе браузер отдает мне файл с исходным кодом текущей страницы. Вот мой код:

    if (isset($_POST['export_send'])) {
        $fn = 'export.csv';
        $file = get_stylesheet_directory()  . "/$fn";
        $handle = fopen("$file", "w");
        fputs($handle, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM
        fputcsv($handle, array('Test', 'Столбец', 'Данные'), ';');
        fclose($handle);
        header('Content-type: text/csv; charset=UTF-8');
        header('Content-Disposition: attachment; filename="'.$file.'"');
     }

    Данный код я прописал в header.php, в итоге файл export.csv создается в папке темы и в него записывается то, что я указал, но браузер отдает вот это: http://prntscr.com/sqpu0p. Всё перепробовал, подскажите, пожалуйста, где я допустил ошибку ? как мне в заголовке указать на данный файл из папки темы ?

    Модератор Yuri

    (@yube)

    но на выходе браузер отдает мне файл с исходным кодом текущей страницы.

    Что написали, то и отдает :/
    Нет смысла создавать физический файл, можно (если файл не нужно раздавать сотням юзеров в секунду) сразу в поток. Сначала заголовки, затем BOM, затем строки и die(). Всё.

    
    if (isset($_POST['export_send'])) {
        header('Content-type: text/csv; charset=UTF-8');
        header('Content-Disposition: attachment; filename=export.csv');
        $out = fopen('php://output', 'w');
        fputs($out, chr(0xEF) . chr(0xBB) . chr(0xBF));
        fputcsv($out, array('Test', 'Столбец', 'Данные'), ';');
        fclose($out);
        die();
     }
    

    @yube , спасибо огромное, очень помог Ваш совет. Остался вопрос, подскажите пожалуйста: данные для экспорта из базы я выбираю по одной метке и по одной категории, а если категорий или меток несколько, нужно перечислять их в коде через запятую ? вот так:

    $query = new WP_Query(
        array(
        'post_type' => 'post',
        'post_status' => 'private',
        'posts_per_page' => -1,
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => $export_type_1, $export_type_2
                ),
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => $export_period_1, $export_period_2
                ),
            ),
        )
    );

    Так верно ?

    Модератор Yuri

    (@yube)

    нужно перечислять их в коде через запятую ?

    Думаю, лучше массивом

    'terms' => array($export_type_1, $export_type_2),
    

    как в примерах
    https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters

    @yube , ещё раз спасибо
    Подскажите ещё, пожалуйста, столкнулся с такой проблемой: при экспорте данных в файлы *.csv при помощи
    fputcsv($out, array('Количество:', "$number"), ';');
    если $number=2.21 (к примеру), то текстовый редактор воспринимает это нормально как 2.21, а при просмотре в Excel отображается февраль 2021. Это можно как-то исправить? может формат переменной нужно преобразовать?
    и нормально ли, что я код, который формирует поток (заголовки, затем BOM, затем строки и die()), поместил в самое начало header.php до, как вы и писали, самого первого байта контента ?

    Модератор Yuri

    (@yube)

    при просмотре в Excel отображается февраль 2021

    «Ну, сумасшедший, что возьмешь» 🙂

    Это можно как-то исправить?

    Вроде как у него есть расширенные настройки импорта, но я их не видел. Я вообще Экселя уже полтора десятка лет не видел, и не скучаю. Так что, увы, тут ничем помочь не могу.

    и нормально ли

    Лучше бы, конечно, на какой-то хук в functions.php темы или в плагин. Но раз работает и не мешает другим, можно считать что нормально.

    @yube , спасибо за ответ

    Лучше бы, конечно, на какой-то хук в functions.php темы или в плагин

    А если все же вешать экспорт данных на какой либо хук, не подскажете, какие хуки срабатывают в момент экспорта при помощи fputcsv() ?

    Модератор Yuri

    (@yube)

    какие хуки срабатывают в момент экспорта при помощи fputcsv() ?

    Более чем странный вопрос. Сама fputcsv(), естественно, никакие хуки не активирует, потому что она не вордпрессовская и про API wordpress вообще ничего не знает. А вокруг нее — это зависит от того, что напишете. Можете даже своих хуков добавить 🙂

    @yube , ещё раз огромное спасибо, хранение данных и экспорт наладил. Можно ещё вопрос: подскажите, пожалуйста, каким образом лучше реализовать во фронт-энде вывод записей пользователей для админа системы с возможностью просмотра записей по определенной группе пользователей (на группы делю по полям таблицы usermeta) или по категории записи подобно скрину http://prntscr.com/swof6b, где заголовок это ссылка на саму запись ?
    Наведите на верную мысль, пожалуйста

    @yube , позвольте задать еще один вопрос: никак не могу разобраться как формировать адрес ссылки в меню в зависимости от того авторизован пользователь или нет. Помогите, пожалуйста, если будет возможность.
    Тему свою реализовал на основе стартовой темы clean-wp-template. Не могу понять как формируется меню, чтобы в нужном месте откорректировать код и сформировать ссылку в меню в зависимости от того авторизован пользователь или нет is_user_logged_in(). Вот мое меню http://prntscr.com/t235gr, и вот функция из functions.php, формирующая меню:

    if (!class_exists('bootstrap_menu')) {
    	class bootstrap_menu extends Walker_Nav_Menu {
    		private $open_submenu_on_hover;
    
    		function __construct($open_submenu_on_hover = true) {
    	        $this->open_submenu_on_hover = $open_submenu_on_hover;
    	    }
    
    		function start_lvl(&$output, $depth = 0, $args = array()) {
    			$output .= "\n<ul class=\"dropdown-menu\">\n";
    		}
    		function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
    			$item_html = '';
    			parent::start_el($item_html, $item, $depth, $args);
    			if ( $item->is_dropdown && $depth === 0 ) {
    			   if (!$this->open_submenu_on_hover) $item_html = str_replace('<a', '<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"', $item_html);
    			   $item_html = str_replace('</a>', ' <b class="caret"></b></a>', $item_html);
    			}
    			$output .= $item_html;
    		}
    		function display_element($element, &$children_elements, $max_depth, $depth = 0, $args, &$output) {
    			if ( $element->current ) $element->classes[] = 'active';
    			$element->is_dropdown = !empty( $children_elements[$element->ID] );
    			if ( $element->is_dropdown ) {
    			    if ( $depth === 0 ) {
    			        $element->classes[] = 'dropdown';
    			        if ($this->open_submenu_on_hover) $element->classes[] = 'show-on-hover';
    			    } elseif ( $depth === 1 ) {
    			        $element->classes[] = 'dropdown-submenu';
    			    }
    			}
    			parent::display_element($element, $children_elements, $max_depth, $depth, $args, $output);
    		}
    	}
    }

    Помогите, пожалуйста, разобраться, если будет возможность.

    Модератор Yuri

    (@yube)

    как формировать адрес ссылки в меню в зависимости от того авторизован пользователь или нет.

    https://ru.wordpress.org/plugins/nav-menu-roles/

Просмотр 15 ответов — с 91 по 105 (всего 145)
  • Тема «Хранение данных в wp_posts и wp_postmeta» закрыта для новых ответов.