如果元字段为空,则生成插件和元数据

时间:2015-05-15 作者:Nate

我正在一个客户网站上创建一个“当前空缺”功能,并且正在一个领域上苦苦挣扎。我想从参考号而不是帖子标题生成一个slug。这个,我已经准备好了。但是,如果没有输入参考号,我想让Wordpress从dechex(time()). 然后我想让生成的引用变成slug,but only if the meta field is empty.

以下是我目前掌握的代码:

add_action(\'save_post\', \'ocp_jobs_save_details\');
function ocp_jobs_save_details(){
  global $post;
  update_post_meta($post->ID, "ocp_jobs_ref", $post->post_name);
  // Other update_post_meta functions for other meta fields
}

add_filter( \'wp_insert_post_data\', \'ocp_jobs_slug\' );
function ocp_jobs_slug( $data ) {
    if( \'job\' == $data[\'post_type\'] ) {
      if ( $_POST[\'ocp_jobs_ref\'] ) { $data[\'post_name\'] = sanitize_title( $_POST[\'ocp_jobs_ref\'] ); }
      else { $data[\'post_name\'] = sanitize_title( dechex( time() ) ); }
    } else { }
    return $data;
}
到目前为止,我有以下几点:

我的dechex(time()) 正在生成参考号post_name.ocp_jobs_ref 引用没有优先于dechex(time()) 参考仅当我没有手动输入参考号时,才应使用生成的编号。我想wp_insert_post_data 钩子甚至在我发布之前就可以工作,所以参考号会自动生成和添加,从而使提交的编号变得多余。

有什么帮助吗?

1 个回复
最合适的回答,由SO网友:Nate 整理而成

好了,玩了一会儿,下面是答案:

add_action(\'save_post\', \'ocp_jobs_save_details\');
function ocp_jobs_save_details(){
  global $post;
  $genref = sanitize_title( dechex( time() ) );
  if ( $post->post_type == \'job\' ) {
    if ( $_POST[\'ocp_jobs_ref\'] ) { $jobs_args = array( \'ID\' => $post->ID, \'post_name\' => strtolower( sanitize_title( $_POST[\'ocp_jobs_ref\'] ) ) ); $myref = strtoupper( $_POST[\'ocp_jobs_ref\'] ); }
    else{ $jobs_args = array( \'ID\' => $post->ID, \'post_name\' => strtolower( $genref ) ); $myref = strtoupper( $genref ); }
    if ( ! wp_is_post_revision( $post->ID ) ){
        remove_action(\'save_post\', \'ocp_jobs_save_details\');
        wp_update_post( $jobs_args );
        add_action(\'save_post\', \'ocp_jobs_save_details\');
    }
  }
  update_post_meta($post->ID, "ocp_jobs_ref", $myref);
  // Other update_post_meta functions
}
Thewp_insert_post_data 根本不需要过滤器。它可能不漂亮也不优雅,但很管用。

结束