$conf, $runtime; function_exists('chdir') AND chdir(APP_PATH); $r = 'mysql' == $conf['cache']['type'] ? website_set('runtime', $runtime) : cache_set('runtime', $runtime); } function runtime_truncate() { global $conf; 'mysql' == $conf['cache']['type'] ? website_set('runtime', '') : cache_delete('runtime'); } register_shutdown_function('runtime_save'); ?>woocommerce offtopic - Wordpress post_content gets deleted in cron after wp_update_post|Programmer puzzle solving
最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

woocommerce offtopic - Wordpress post_content gets deleted in cron after wp_update_post

matteradmin8PV0评论

I'm developing a Wordpress plugin (integrated with WooCommerce) that fetches HTML Content from an API, and add it to a WP Post as post_content into an iframe, this way:

kses_remove_filters();
$newData['description'] = str_replace("\n", "", $newData['description']);
$newData['description'] = str_replace("\t", "", $newData['description']);
$post = $this->getPostByAPIId($product->api_id);

$id = $post->ID ?? get_post($product->woo_id)->ID;
if (isset($id) && !empty($id)) {
    $this->wpdb->update(
        "{$this->wpdb->prefix}posts",
        [
            'post_content'  => '<iframe class="custom-post" id="custom_product_post_content" src="' . htmlspecialchars('data:text/html,' . stripslashes(rawurlencode($newData['description']))) . '" style="display: block;width:100vw; height:100vh; border:none; margin:0; padding:0; overflow:hidden; z-index:999999; min-height:300px!important;"></iframe>'
        ],
        [
            'ID' => $id
        ]
    );
}
kses_init_filters();

Even if I put the kses_remove_filters(), when I open wordpress to check the new content, I find out that the post_content is empty.

If I try to debug the plugin with xdebug, I find out that post_content is updated, but when I refresh wordpress, the post_content disappear.

A few project specifications before starting:

  1. I can't just embed the API as src
  2. I don't want to fetch content via javascript
  3. I used an iframe because I know that wordpress post_content can't embed a full HTML page like this: html > head { title } > body { style and various tags }
  4. I don't write the HTML personally, I need to embed it via the API

Feel free to ask any question. Thanks in advance.

Edit: Even if I use wp_update_post(['ID' => $id, 'post_content' => '...']) the post_content doesn't get updated and I get empty content.

Edit 2:

I enabled query log on my development environment and during debug session I found out that the function that "remove" the post_content is

wc_update_product_stock( $postId, $quantity )

Even if I wrap this function with a kses_remove_filters(), the function doesn't change its behaviour. Is there any way to "change" this behaviour without changing stock quantity update?

I'm developing a Wordpress plugin (integrated with WooCommerce) that fetches HTML Content from an API, and add it to a WP Post as post_content into an iframe, this way:

kses_remove_filters();
$newData['description'] = str_replace("\n", "", $newData['description']);
$newData['description'] = str_replace("\t", "", $newData['description']);
$post = $this->getPostByAPIId($product->api_id);

$id = $post->ID ?? get_post($product->woo_id)->ID;
if (isset($id) && !empty($id)) {
    $this->wpdb->update(
        "{$this->wpdb->prefix}posts",
        [
            'post_content'  => '<iframe class="custom-post" id="custom_product_post_content" src="' . htmlspecialchars('data:text/html,' . stripslashes(rawurlencode($newData['description']))) . '" style="display: block;width:100vw; height:100vh; border:none; margin:0; padding:0; overflow:hidden; z-index:999999; min-height:300px!important;"></iframe>'
        ],
        [
            'ID' => $id
        ]
    );
}
kses_init_filters();

Even if I put the kses_remove_filters(), when I open wordpress to check the new content, I find out that the post_content is empty.

If I try to debug the plugin with xdebug, I find out that post_content is updated, but when I refresh wordpress, the post_content disappear.

A few project specifications before starting:

  1. I can't just embed the API as src
  2. I don't want to fetch content via javascript
  3. I used an iframe because I know that wordpress post_content can't embed a full HTML page like this: html > head { title } > body { style and various tags }
  4. I don't write the HTML personally, I need to embed it via the API

Feel free to ask any question. Thanks in advance.

Edit: Even if I use wp_update_post(['ID' => $id, 'post_content' => '...']) the post_content doesn't get updated and I get empty content.

Edit 2:

I enabled query log on my development environment and during debug session I found out that the function that "remove" the post_content is

wc_update_product_stock( $postId, $quantity )

Even if I wrap this function with a kses_remove_filters(), the function doesn't change its behaviour. Is there any way to "change" this behaviour without changing stock quantity update?

Share Improve this question edited Nov 27, 2018 at 16:14 Kalizi asked Nov 26, 2018 at 10:26 KaliziKalizi 1115 bronze badges 10
  • Why are you inserting directly into the database and not using wp_update_post()? – Jacob Peattie Commented Nov 26, 2018 at 10:30
  • Because wp_update_post() doesn't update the post_content – Kalizi Commented Nov 26, 2018 at 10:56
  • What? Of course it does. – Jacob Peattie Commented Nov 26, 2018 at 10:57
  • I tried to perform wp_update_post(['ID' => $id, 'post_content' => '...']) but when I refresh the wordpress page, or I select the post_content from the posts table, I get empty post_content. – Kalizi Commented Nov 26, 2018 at 10:59
  • Aren't you having the same problem with the version in your question? – Jacob Peattie Commented Nov 26, 2018 at 11:00
 |  Show 5 more comments

1 Answer 1

Reset to default 0

WooCommerce stock quantity update by using

wc_update_product_stock( $postId, $quantity )

used to remove post_content, so I put quantity update before the post_content update.

Post a comment

comment list (0)

  1. No comments so far