我有一个名为houses的自定义帖子类型。在我的自定义帖子类型中,我有几个使用ACF创建的自定义字段。
我需要做的是在创建新帖子时更改永久链接。
我想使用code 和title 要自定义永久链接的字段:
//code + post title
4563312-house-example-1
我正在开发一个控制一切的插件。有没有办法通过创建帖子来更新其永久链接?
谢谢
我有一个名为houses的自定义帖子类型。在我的自定义帖子类型中,我有几个使用ACF创建的自定义字段。
我需要做的是在创建新帖子时更改永久链接。
我想使用code 和title 要自定义永久链接的字段:
//code + post title
4563312-house-example-1
我正在开发一个控制一切的插件。有没有办法通过创建帖子来更新其永久链接?
谢谢
Cedon给我的例子是,我可以达到我所需要的,只需做一些改变。
使用wp\\u insert\\u post\\u数据,我无法获取自定义字段值,为此,我必须使用另一个操作,save_post 相反
function rci_custom_permalink($post_id) {
$post = get_post($post_id);
if($post->post_type !== \'houses\') return;
$code = get_field(\'code\', $post_id);
$post_name = sanitize_title($post->post_title);
$permalink = $code . \'-\' . $post_name;
// remove the action to not enter in a loop
remove_action(\'save_post\', \'rci_custom_permalink\');
// perform the update
wp_update_post(array(\'ID\' => $post_id, \'post_name\' => $permalink));
// add the action again
add_action(\'save_post\', \'rci_custom_permalink\');
}
add_action(\'save_post\', \'rci_custom_permalink\');
PS:因为所有这些字段都是必需的,所以我不需要检查它们是否为空。有关save\\u post操作的参考:Plugin API/Action Reference/save post
可以使用wp_insert_post_data
钩
function house_post_slug( $data ) {
if ( $data[\'post_type\'] == \'houses\' ) {
$permalink = \'\';
if ( isset ( $_POST[\'ACF Code Field\'] ) ) {
$permalink = $_POST[\'ACF Code Field\'];
}
if ( isset ( $_POST[\'post_title\'] ) ) {
$permalink .= \'-\' . $_POST[\'post_title\'];
}
$data[\'post_name\'] = sanitize_title( $permalink )
}
error_log( \'=== Filter $data ===\');
error_log( print_r($data, true) );
return $data;
}
add_filter( \'wp_insert_post_data\', \'house_post_slug\' );
所以这个过滤器要做的就是拦截$data
在WordPress中,检查post_type
字段用于自定义帖子类型,因此它只会针对特定的CPT激发。然后检查是否设置了ACF代码字段。如果是,则将`$permalink设置为该值。
我没有使用ACF,所以我不确定他们使用的是什么结构。您可以通过添加以下内容查看此转储:
error_log( print_r ( $_POST, true ) );
接下来,它将检查post_title
键已设置。如果是,那么它将附加-
无论post_title
是最后,我们设置post_name
输入$data
到的净化版本$permalink
然后把它还给我。
我放了两个error_log()
语句,以便查看$data
用于诊断目的。
我已将wordpress项目导出并导入live server。现在的问题是,我将permalink结构作为“localhost”格式。当我单击网站中的任何链接时,它会将我重定向到localhost。我怎样才能改变这一点?我的htaccess文件如下所示<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /myproject/ RewriteRule ^index\\.php$ - [L] RewriteCo