创建帖子时自定义固定链接

时间:2018-02-20 作者:Italo Borges

我有一个名为houses的自定义帖子类型。在我的自定义帖子类型中,我有几个使用ACF创建的自定义字段。

我需要做的是在创建新帖子时更改永久链接。

我想使用codetitle 要自定义永久链接的字段:

//code + post title
4563312-house-example-1
我正在开发一个控制一切的插件。

有没有办法通过创建帖子来更新其永久链接?

谢谢

2 个回复
最合适的回答,由SO网友:Italo Borges 整理而成

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

SO网友:Cedon

可以使用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 用于诊断目的。

结束

相关推荐

How to replace permalinks

我已将wordpress项目导出并导入live server。现在的问题是,我将permalink结构作为“localhost”格式。当我单击网站中的任何链接时,它会将我重定向到localhost。我怎样才能改变这一点?我的htaccess文件如下所示<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /myproject/ RewriteRule ^index\\.php$ - [L] RewriteCo