当我们在wordpress中添加新帖子时,在提供帖子标题后,会自动生成slug。我需要编辑该自动生成模块,以便我可以自动在slug的末尾添加一些任意数字。怎么做?
答案 0 :(得分:13)
请勿使用OP在此处使用的硬编码版本。当他这样做时,没有可用的过滤器。最近,自3.3以来,增加了一个过滤器。
add_filter( 'wp_unique_post_slug', 'custom_unique_post_slug', 10, 4 );
function custom_unique_post_slug( $slug, $post_ID, $post_status, $post_type ) {
if ( $custom_post_type == $post_type ) {
$slug = md5( time() );
}
return $slug;
}
然而,每次保存帖子时,这种方法都会改变slu ..这就是我所希望的......
修改强>
这种方法可以将生成限制为一次。唯一的缺点是,在创建标题后ajax运行时会创建一个版本,然后在保存帖子时创建另一个永久性slug。
function custom_unique_post_slug( $slug, $post_ID, $post_status, $post_type ) {
if ( $custom_post_type == $post_type ) {
$post = get_post($post_ID);
if ( empty($post->post_name) || $slug != $post->post_name ) {
$slug = md5( time() );
}
}
return $slug;
}
答案 1 :(得分:2)
编写一个插件以挂钩wp_insert_post_data
过滤器,以便在发送帖子以插入数据库之前更新slug:
function append_slug($data) {
global $post_ID;
if (empty($data['post_name'])) {
$data['post_name'] = sanitize_title($data['post_title'], $post_ID);
$data['post_name'] .= '-' . generate_arbitrary_number_here();
}
return $data;
}
add_filter('wp_insert_post_data', 'append_slug', 10);
请注意,此功能要求您允许WordPress首先自动生成slug,这意味着您不能在生成之前输入您自己的slug,并且它无法使用该数字更新现有帖子。
答案 2 :(得分:2)
测试:(将其粘贴到functions.php中)
function append_slug($data) {
global $post_ID;
if (!empty($data['post_name']) && $data['post_status'] == "publish" && $data['post_type'] == "post") {
if( !is_numeric(substr($data['post_name'], -4)) ) {
$random = rand(1111,9999);
$data['post_name'] = sanitize_title($data['post_title'], $post_ID);
$data['post_name'] .= '-' . $random;
}
}
return $data; } add_filter('wp_insert_post_data', 'append_slug', 10);
答案 3 :(得分:0)
add_filter('post_link','postLinkFilter', 10, 3);
/**
* Manipulates the permalink
*
* @param string $permalink
* @param stdClass $post
* @return string
*/
function postLinkFilter($permalink,stdClass $post){
return $permalink.'?12345';
}
在这种情况下未经测试,但我已经使用过它,应该使用最少的更改,但尝试正确地测试它。
在任何情况下,不要在这里使用rand()
或类似的东西,因为每次都要为同一个帖子返回相同的链接,否则你会遇到一些严重的问题。
玩得开心!
答案 4 :(得分:0)
您应该使用wp_ajax_sample-permalink
操作和name_save_pre
过滤器进行操作。