• Здравствуйте форумчане.

    Люблю работать с произвольными полями, но никак не могу понять, как выполнить поиск значения в массиве данных в произвольном поле? Через какую функцию дать понять, что бы он выводил не весь а массив, а лишь необходимую часть? Например, в поле ‘фильм’ есть несколько значений, разделённых запятой и пробелом: триллер, комедия, драма, боевик. Как вытащить посты через query, используя лишь определённое значение, а не весь массив? Через meta-key=фильм&meta-value=комедия выводится естественно только записи с единственным значением «комедия», если оно присутствует в значение вместе с другими, то стандартным способом это не выводится. Надеюсь получилось объяснить идею.

    Так же интересует, через какую функцию идёт обновление произвольного поля, например пользователями? Я так понимаю, вся эта радость происходит через add_post_meta, update_post_meta и соответственно delete_post_meta, но как их привязать к линку или кнопке, которая будет добавлять или удалять значение (например жанр фильма с разделителем — запятая или пробел) в произвольном поле при нажатии (но не создавать новое, а работать в уже имеющимся массиве).

    Спасибо за любые наводки и подсказки.

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • если вам нужно найти подстроку в строке — то есть если вы хотите, чтоб при выборке по запросу

    SELECT * FROM table WHERE string='text'

    вам также выбирался такой string в котором значение не только абсолютно равно text, но и такой, где слово text просто присутствует (напирмер digit, text, image) — то вам нужно построить свой запрос с использованием LIKE

    в итоге получим примерно такой запрос

    SELECT * FROM table WHERE string LIKE '%text%'

    Хорошо, спасибо. Это для БД. Как это использовать в непосредственно в вордпрессе, теме? Как реализовать функцию поиска ключа в массиве произвольного поля записи, а так же редактирование его, через кнопку или событие на страницах? Такое реализуется в плагинах, например рейтинга, но не могу понять как работать с массивом.

    Может неправильно понимаю ваш вопрос, но попробую предложить решение. Кастомные поля у записи можно получить массивом. Это хорошо, потому что мы можем проверить входящую переменную простым способом

    $var = 'video';
    $custom_fields = array('video', 'music', 'text');
    if ( in_array($var, $custom_fields) )
        //попадаем сюда, если есть совпадение

    Вроде пока работает такая конструкция:

    <?php if ( is_user_logged_in() ):
    $current_page = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $key = 'video';
    $value = 'action';
    $themeta = get_post_meta($post->ID, $key, true);
    if($themeta != $value ) {
    $params = array(
    	'meta_key' => 'video',
    	'meta_value' => $value,
    	'meta_compare' => 'LIKE',
    	'caller_get_posts' => 1,
    	'paged'  => $current_page // текущая страница
    );
    query_posts($params);
    $wp_query->is_archive = true;
    $wp_query->is_home = false;
    } ?>

    Записи выдаются, которые имеют в произвольном поле хотя бы одно значение (переменную) $value. Будем тестировать. Вопрос теперь в том, как заставить добавить(удалить) значение-переменную в произвольное поле записи через кнопку или ссылку на сайте. Т.е. пользователь нажимает на кнопку «добавить» и в произвольное поле вносится переменная (например жанр фильма «комедия», потом понимает, что ошибся и нажимает «удалить» и оно удаляется. Естественно значение должно разделяться между собой запятой или пробелом. Копался в разных плагинах подобных (например, похожий функционал в My Favorite Post), но пока ничего не накопал. Может вместе подумаем 😉 ?

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Значение в массиве произвольного поля» закрыта для новых ответов.