【问题标题】:How to Push WordPress Post Content via Plugin Update?如何通过插件更新推送 WordPress 帖子内容?
【发布时间】:2017-02-07 22:49:08
【问题描述】:

我们有一个内部 WordPress 插件,它使用自定义帖子类型创建内容。从本质上讲,创建的内容在所有意图和目的上都与 WordPress 的“页面”相同。

我们的想法是,我们通过我们的插件添加这些自定义“页面”,然后为使用该插件的任何人部署/更新它们。我们已经使用我们的插件创建了一系列这样的页面,但问题是如何使用插件移植这些自定义内容。

最初我们认为,由于我们的帖子具有自定义帖子类型,因此我们可以轻松地在数据库中识别它们。事实上,我们在卸载插件时使用它来删除我们的自定义内容。

但是我们如何做相反的事情呢?理想情况下,我们希望更新插件,以及我们添加或修改的任何自定义内容。

最初我们考虑只使用 MySQL 脚本来添加此自定义帖子内容,但经过一番研究,这似乎不是正确的做法。

我知道 WordPress 有一个 wp_insert_post() 函数,但我只是不确定它是如何组合在一起的。

理想情况下,答案将是更新自定义内容的过程概述。例如,我们的插件中是否应该有一个函数,在安装时,它会查找一个 sql 文件并从中创建新帖子?

谢谢!

【问题讨论】:

  • 还没有尝试任何东西 - 只是在寻找尝试的方向。
  • This 是我的倾向,但我不太明白更新现有帖子时会发生什么。这种以编程方式添加帖子的方法是否也适用于更新现有帖子?
  • this 可能是一个很好的起点,还有wp_insert_post() 函数

标签: php mysql wordpress


【解决方案1】:

如果我理解正确,并且您尝试通过插件更新在多个安装中保持内容同步,您将需要为您的所有内容创建一个唯一 ID。当您以编程方式进行更新时,您将通过帖子 ID 进行更新,但每次安装都会有不同的帖子 ID。您可以使用帖子元字段为每个帖子提供特定于您的插件的唯一 ID。然后,您可以根据您的唯一元字段查询帖子。

我会对插件进行编码,以便它检查是否有带有您唯一 ID 的帖子。如果找不到,则插入新帖子。如果找到,则更新帖子。

假设您创建了第一个内容,它的唯一 ID 将是 jgohil_1。您的插件可能会使用类似以下内容来检查该唯一 ID,然后根据它是否存在进行更新或插入。

<?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 ) && $post_id !== 0 ) {
        update_post_meta( $post_id, $meta_key, $meta_value );
    } else {
        // do some error handling here
    }
}

如果您需要一次处理多条内容,您可能希望使用循环并每次更改元值。

【讨论】:

  • 这正是我们想要做的!在我们的例子中,我们是唯一向我们的自定义帖子类型添加内容的人——所以我们计划使用帖子标题,与自定义 post_type 配对来识别我们的帖子(无论 ID 是什么)——这看起来是否可行根据你的建议? (代替另一个帖子元)
  • 只要您的自定义帖子类型名称相当独特,您可能不会遇到任何冲突。我能想到的唯一问题是,如果您开始更改帖子标题,当用户从不同的插件版本跳转时,可能会难以维护。用户还可能会更改帖子的标题,您也可能会在那里遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多