Как протолкнуть содержимое публикации WordPress через обновление плагина?

#php #mysql #wordpress

#php #mysql #wordpress

Вопрос:

У нас есть собственный плагин WordPress, который создает контент с использованием пользовательского типа post. По сути, создаваемый контент, по сути, идентичен «страницам» WordPress.

Идея в том, что мы добавляем эти пользовательские «страницы» — с помощью нашего плагина — а затем развертываем / обновляем их для тех, кто использует плагин. Мы использовали наш плагин для создания серии этих страниц, но вопрос в том, как перенести этот пользовательский контент с помощью плагина.

Изначально мы думали, что, поскольку наши сообщения имеют пользовательский тип post, мы можем легко идентифицировать их в БД. Фактически, мы используем это для удаления нашего пользовательского содержимого при удалении плагина.

Но как нам сделать обратное? В идеале мы хотели бы обновить плагин, а вместе с ним и любой пользовательский контент, который мы добавили или изменили.

Первоначально мы думали просто использовать скрипты MySQL для добавления этого пользовательского содержимого публикации, но после небольшого исследования это не кажется правильным способом сделать это.

Я знаю, что в WordPress есть функция wp_insert_post(), но я просто не уверен, как все это сочетается.

В идеале ответом будет обзор процесса обновления нашего пользовательского контента. Например, должна ли в нашем плагине быть функция, которая после установки ищет файл sql и создает из него новые сообщения?

Спасибо!

Комментарии:

1. Еще ничего не пробовал — просто ищу направление относительно того, что попробовать.

2. Это то, к чему я склоняюсь, но я не совсем понимаю, что происходит при обновлении существующего сообщения. Будет ли этот метод программного добавления сообщений также работать для обновления существующих сообщений?

3. вероятно, это хорошая отправная точка, наряду с wp_insert_post() функцией

Ответ №1:

Если я правильно понимаю, и вы пытаетесь синхронизировать контент в нескольких установках с помощью обновлений плагинов, вам нужно будет создать уникальный идентификатор для всего вашего контента. Когда вы выполняете обновления программно, вы обновляетесь по идентификатору записи, но каждая установка будет иметь разные идентификаторы записей. Вы можете использовать метаполе post, чтобы присвоить каждому сообщению уникальный идентификатор, специфичный для вашего плагина. Затем вы можете запрашивать сообщения на основе вашего уникального мета-поля.

Я бы закодировал плагин, чтобы он проверял, есть ли сообщение с вашим уникальным идентификатором. Если оно не найдено, вы вставляете новое сообщение. Если оно найдено, вы обновляете сообщение.

Допустим, вы создали свой первый фрагмент контента, и его уникальный идентификатор будет jgohil_1 . Ваш плагин может использовать что-то вроде следующего, чтобы проверить этот уникальный идентификатор, а затем обновить или вставить в зависимости от того, существует ли он.

 <?php

// our meta key/value pair for our unique id
$meta_key = 'jgohil_unique_id';
$meta_value = 'jgohil_1';

// set our new content
$new_content = 'The new content here';
$new_title = 'The new title here';

// check the database to see if we have created the post already by querying for our unique id
global $wpdb;

$sql = $wpdb->prepare (
    "SELECT post_id 
    FROM $wpdb->postmeta 
    WHERE meta_key = %s 
    AND meta_value = %s",
    $meta_key,
    $meta_value
);

$post_id = $wpdb->get_var( $sql );

// if we got a post id then update else insert
if ( $post_id ) {

    // set up the data for updating
    $data = array(
        'ID' => $post_id,
        'post_content' => $new_content,
        'post_title' => $new_title,
    );

    // update the post
    $updated = wp_update_post( $data );

    if ( is_wp_error( $updated ) ) {
        // do some error handling here
    }

} else {
    $data = array(
        'post_title' => $new_title,
        'post_content' => $new_content
        'post_type' => 'your_custom_post_type'
    );

    $post_id = wp_insert_post( $data );

    // if the insert worked give the post the unique meta id
    if ( ! is_wp_error( $post_id ) amp;amp; $post_id !== 0 ) {
        update_post_meta( $post_id, $meta_key, $meta_value );
    } else {
        // do some error handling here
    }
}
  

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

Комментарии:

1. Это именно то, что мы пытаемся сделать! В нашем случае мы единственные, кто добавляет контент в наши пользовательские типы сообщений — поэтому мы планировали использовать заголовок сообщения в паре с пользовательским post_type для идентификации наших сообщений (независимо от идентификатора) — похоже, это сработает на основе вашего предложения? (вместо другой мета-записи)

2. Пока ваше пользовательское имя типа записи достаточно уникально, вы, вероятно, не столкнетесь с какими-либо конфликтами. Единственная проблема, о которой я могу думать, заключается в том, что если вы начнете менять заголовки сообщений, это может затруднить поддержку, когда пользователи переходят с разных версий плагина. Пользователи также могут потенциально изменить заголовок сообщения, и вы также можете столкнуться с проблемами там.