Nano Hash - криптовалюты, майнинг, программирование

Wordpress API - метаполе сообщения

Я пытаюсь создать сообщение через WP API и использую python для отправки http-запросов. Таким образом, пример тела http-запроса будет выглядеть так:

body = json.dumps(dict(
    slug='test',
    status='publish',
    title='test',
    excerpt='test',
    content='test',
    author=1,
    comment_status='open',
    ping_status='open',
    categories=[1],
    meta={
        '_links_to': 'https://google.com',
        '_knawatfibu_url': 'https://some-image.jpg'
    }
))

А сама отправка выглядит так:

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + base64.b64encode(f'{settings.WP_LOGIN}:{settings.WP_PASS}'.encode()).decode()
}

response = requests.post(settings.WP_HOST + '/wp-json/wp/v2/posts', json=data, headers=headers)

Теперь хорошая новость заключается в том, что он создает сообщение.

Но он не устанавливает мета-поля, из-за чего некоторые плагины не действуют. Как принудительно настроить метаполя через API?

Я слышал, что мне нужно открыть определенные метаполя через PHP-код. Но как мне это сделать и самое главное - где мне это сделать?

ИЗМЕНИТЬ:

Я попытался добавить этот фрагмент кода PHP в functions.php и решил, что он показывает все мета-поля при вызове API GET, но установка этих полей по-прежнему невозможна.

add_action( 'rest_api_init', 'create_api_posts_meta_field' );
function create_api_posts_meta_field() {
    // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
    register_rest_field( 'post', 'meta', array(
        'get_callback' => 'get_post_meta_for_api',
        'schema' => null,
        )
    );
}
function get_post_meta_for_api( $object ) {
    //get the id of the post object array
    $post_id = $object['id'];

    //return the post meta
    return get_post_meta( $post_id );
}
24.06.2019

Ответы:


1

Нашел ответ.

Просто поместите этот фрагмент кода PHP в файл functions.php:

add_action("rest_insert_post", function ($post, $request, $creating) {
    $metas = $request->get_param("meta");

    if (is_array($metas)) {

        foreach ($metas as $name => $value) {
            update_post_meta($post->ID, $name, $value);
        }

    }
}, 10, 3);
25.06.2019
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..