如何阻止WordPress更新帖子元数据

时间:2016-12-17 作者:Den Pat

我尝试过使用许多挂钩来实现这一点。我不想在更新帖子时更新我的帖子元。

我试过这样做:

add_filter( \'update_post_metadata\', \'wpse_163859\', 10, 5 );
function wpse_163859( $check, $object_id, $meta_key, $meta_value, $prev_value )
{
    return false;
}
我试着看meta.php 在可湿性粉剂包括,尝试了一整天的大量代码,感谢任何帮助。

1 个回复
SO网友:Nathan Johnson

如何阻止WordPress更新帖子

在更新元数据之前,WordPress启动过滤器"update_{$meta_type}_metadata". 这是一个动态过滤器,取决于元数据附加到的帖子类型。例如update_post_metadata 将在更新post post\\u类型。同样地update_page_metadata 将在更新page 元数据。

一个问题可能是您的帖子类型不是帖子,在这种情况下,钩子永远不会开火。您提供的代码应该会使所有post 元数据。

另一种可能的情况是,有另一个插件或主题正在连接到update_post_metadata 在你之后。在您的代码中,您的优先级为10。您可以在稍后的时间(如9999)连接到该事件。连接到此过滤器的其他函数/方法将在您的函数/方法之前运行,您基本上会覆盖它们。

add_filter( \'update_post_metadata\', \'wpse_249566\', 9999, 5 );
function wpse_249566( $check, $object_id, $meta_key, $meta_value, $prev_value ) {
  //* Return true or false depending on if the meta_value is empty
  return \'\' === $meta_value ? false : true;
}
如果这两个都不能解决问题,那么我能看到的唯一其他可能的问题是,您在WordPress处理update_post_metadata

如果没有任何工作,并且您希望在插入数据库之前拦截所有元数据,例如测试挂钩是否实际启动,那么您可以使用类似的方法。

//* Hook into admin_init to add filters to wp-admin
add_action( \'admin_init\', function() {
  //* Basically foreach $post_type
  array_map( function( $post_type ) {
    //* Add a filter for when each of the post_type metadata updates
    add_filter( "update_{$post_type}_metadata", function(){ 
      //* Add action to wp_head to alert us
      add_action( \'wp_head\', function() use ( $post_type ) {
        print "alert( \\"Prevented $post_type metadata from updating.\\" );"
      }
      return false;
    }, 9999 );
  }, array_keys( get_post_types() ) );
}

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private