我正在一个客户网站上创建一个“当前空缺”功能,并且正在一个领域上苦苦挣扎。我想从参考号而不是帖子标题生成一个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
钩子甚至在我发布之前就可以工作,所以参考号会自动生成和添加,从而使提交的编号变得多余。
有什么帮助吗?
最合适的回答,由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
}
The
wp_insert_post_data
根本不需要过滤器。它可能不漂亮也不优雅,但很管用。