如何在更新自定义帖子类型的固定链接时覆盖用户的输入?

时间:2015-04-08 作者:Jiminy Cricket

发布自定义帖子类型时,我试图基于代码而不是用户在输入框中键入的内容来覆盖自定义永久链接。我可以确认我的操作是否正确触发,但我怀疑它是在更新事件之前触发的,因此用户的值会覆盖我的值。

add_action(\'publish_course-variation\', \'update_course_variation_permalink\', 10, 3);

function update_course_variation_permalink($course_variation_id){

  $cv_meta = get_post_meta($course_variation_id);
  $desired_permalink_value = "my/custom/permalink";

  if( isset($cv_meta[\'custom_permalink\']) ){
      //HAS PERMALINK = CHECK AND UPDATE IF REQUIRED
      if( get_post_meta($course_variation_id, \'custom_permalink\', true) != $desired_permalink_value ){
        update_post_meta($course_variation_id, \'custom_permalink\', $desired_permalink_value); 
        $results = "UPDATED";
      }else{
        $results = "UNTOUCHED/ALREADY SET CORRECTLY";
      }
  }else{
    //DOESNT HAVE PERMALINK = ADD
    add_post_meta($course_variation_id, \'custom_permalink\', $desired_permalink_value, true); 
    $results = "NEW CUSTOM PERMALINK CREATED";
  }



}//end function
更新帖子后,我如何采取行动?或者通过点击“发布”来禁用永久链接的更新?

谢谢

2 个回复
SO网友:cybmeta

这个publish_{post-type} 只有当帖子状态(未发布)变为已发布时,才会触发动作;例如,如果帖子已经发布,并且您对其进行了编辑publish_{post-type} 未触发操作。我想你需要把你的函数save_post_{post_type} 无论状态如何,每次保存帖子时都会触发操作:

add_action(\'save_post_course-variation\', \'update_course_variation_permalink\', 10, 3);

function update_course_variation_permalink($course_variation_id){

  $cv_meta = get_post_meta($course_variation_id);
  $desired_permalink_value = "my/custom/permalink";

  if( isset($cv_meta[\'custom_permalink\']) ){
      //HAS PERMALINK = CHECK AND UPDATE IF REQUIRED
      if( get_post_meta($course_variation_id, \'custom_permalink\', true) != $desired_permalink_value ){
        update_post_meta($course_variation_id, \'custom_permalink\', $desired_permalink_value); 
        $results = "UPDATED";
      }else{
        $results = "UNTOUCHED/ALREADY SET CORRECTLY";
      }
  }else{
    //DOESNT HAVE PERMALINK = ADD
    add_post_meta($course_variation_id, \'custom_permalink\', $desired_permalink_value, true); 
    $results = "NEW CUSTOM PERMALINK CREATED";
  }

}//end function
Note: 将数据存储在custom_permalink 元字段对永久链接没有影响。不确定您是如何处理post permalink的。我刚刚回答了您关于更新帖子时如何触发该功能的问题。如果您想真正重写permalink(不是元字段),可以使用它(基于此answer):

add_filter(\'wp_insert_post_data\', \'wpse_wp_insert_post_data\', 10, 2);
function wpse_wp_insert_post_data($data, $post_attr) {

    $desired_permalink_value = "my/custom/permalink";

    if( ( isset( $data[\'post_name\'] ) && $data[\'post_name\'] != $desired_permalink_value ) || empty( $data[\'post_name\'] ) ) {
        $data[\'post_name\'] = $desired_permalink_value;
    }

    return $data;
}

SO网友:Web Dev

你可以做一个display:none 在css选择器上选择slug,这样他们就看不到它了。

结束

相关推荐

How to replace permalinks

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