无法将_action添加到‘SAVE_POST’并使其触发

时间:2018-04-25 作者:Zeth

我试图在每次有人按下“发布”按钮时添加一个操作。我完成了以下功能:

function custom_set_category_on_cpt( $post_ID, $post, $update ) {

echo \'<p>This does not show, unless I hook it onto admin_head or admin_footer</p>\';

if ( \'publish\' === $post->post_status ) {

  echo \'<p>I can\'t get anything in here to show... Ever!?</p>\';  

}
add_action( \'save_post\', \'custom_set_category_on_cpt\', 10 );

// Other attempts, without any change of results
//add_action( \'save_post\', \'custom_set_category_on_cpt\', 10, 3 );
//add_action( \'save_post\', \'custom_set_category_on_cpt\', 5, 3 );
//add_action( \'save_post\', \'custom_set_category_on_cpt\', 15, 3 );
我知道“save\\u post”钩子在保存草稿时也会开火。

我尝试了各种各样的方法,但都没能成功。

2 个回复
SO网友:forsvunnet

当使用管理界面编辑帖子时,wp admin/post。php脚本在保存帖子后重定向您。这样做是为了避免在提交后刷新页面时重新提交post请求。这也意味着在save_post 行动

case \'editpost\':
    check_admin_referer(\'update-post_\' . $post_id);

    $post_id = edit_post();

    // Session cookie flag that the post was saved
    if ( isset( $_COOKIE[\'wp-saving-post\'] ) && $_COOKIE[\'wp-saving-post\'] === $post_id . \'-check\' ) {
        setcookie( \'wp-saving-post\', $post_id . \'-saved\', time() + DAY_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl() );
    }

    redirect_post($post_id); // Send user on their way while we keep working

    exit();
您可以像WordPress那样,使用Cookie来存储要显示的消息

<?php

class Your_Class_Name_Here {

  /**
   * Setup
   */
  static function setup() {
    add_action( \'save_post\', __CLASS__.\'::save_post\', 10, 2 );
    add_action( \'in_admin_header\', __CLASS__.\'::display_message\' );
  }

  /**
   * Action: Save post
   * hooked on save_post
   * @param  integer $post_ID
   * @param  WP_Post $post
   */
  static function save_post( $post_ID, $post ) {
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
      return;
    }
    if ( \'publish\' !== $post->post_status ) {
      return;
    }
    setcookie( \'Your_Class_Name_Here\', \'display_message\', time() + DAY_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl() );
  }

  /**
   * Action: Display message
   * hooked on in_admin_header
   */
  static function display_message() {
    if ( ! isset( $_COOKIE[\'Your_Class_Name_Here\'] ) ) {
      return;
    }
    if ( $_COOKIE[\'Your_Class_Name_Here\'] != \'display_message\' ) {
      return;
    }
    // Delete the cookie
    setcookie( \'Your_Class_Name_Here\', null, -1, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, is_ssl() );
    unset( $_COOKIE[\'Your_Class_Name_Here\'] );
    // Output the message
    echo "Your message here";
  }

}

Your_Class_Name_Here::setup();

SO网友:Nitin Sharma

您也可以仅针对特定的自定义帖子类型尝试以下代码。add_action( \'publish_YOUR_CUSTOM_POST_TYPE_SLUG\', \'your_function_name\', 999, 3 );

结束

相关推荐

从Functions.php访问插件数据

我正在尝试将wordpress帖子中的数据插入到新的表数据库表中,而不是WP_postmeta. 我的函数正在运行,它将插入$postid 没问题。我遇到的问题是,我需要从Marty Spellerbergs的“地址地理编码器”插件中插入纬度和经度坐标。在插件页面上,Marty说您可以使用以下内容访问循环中的Cooridate:<?php echo get_geocode_lng( $post->ID ); ?> <?php echo get_geocode_lat( $p