将日期显示为自定义帖子类型的固定链接,而不是帖子名称

时间:2019-08-25 作者:McDeeez

我创建了一个自定义的帖子类型,并指定了一个重写来将永久链接更改为/old donuts/。请参见下面的代码:

function donut_newsletters_post_type() {

  $labels = array(
    \'name\' => \' Newsletters\',
    \'singular_name\' => \' Newsletter\',
    \'add_new\' => \'Add \',
    \'add_new_item\' => \'Add New \',
    \'edit_item\' => \'Edit \',
    \'new_item\' => \'New \',
    \'view_item\' => \'View \',
    \'search_item\' => \'Search Daily s\',
    \'not_found\' => \'No s found\',
    \'not_found_in_trash\' => \'NO s found in the trash..that would be a sin\'
  );
  $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'has_archive\' => false,
    \'publicly_queryable\' => true,
    \'query_var\' => true,
    \'rewrite\' => array(
      \'slug\' => \'old-donuts\'
    ),
    \'capability_type\' => \'post\',
    \'hierarchical\' => false,
    \'supports\' => array(
      \'title\',
      \'editor\',
      \'excerpt\',
      \'thumbnail\'
    ),
    \'taxonomies\' => array(\'post_tags\'),
    \'menu_position\' => 0,
    \'exclude_from_search\' => true,
    \'menu_icon\'   => \'dashicons-email\'
  );

  register_post_type(\'donut_newsletters\', $args);
}

add_action(\'init\', \'donut_newsletters_post_type\');
现在,假设我创建了一个新帖子并将其命名为“test”,永久链接默认为https://thedonut.co/old-donuts/test

I don\'t want this. 什么是我do 希望permalink默认为如下自定义日期结构:

https://thedonut.co/old-donuts/2019-08-24/

我还希望编辑可以修改permalink,这样,如果他/她必须在他们想要发布的前一天创建帖子,他们可以将日值更改为第二天。

请不要将我发送到插件。我已经尝试过自定义post类型的permalinks插件,它可以满足我的需要,但它不允许在发布帖子后修改permalink。

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

您可以做的一件事是预先设置post_name 字段使用wp_insert_post_data hook. 该字段传递2个变量:$data 这是初始默认数据$postedarr 这是在发布、更新或发布文章时给出的信息。

/**
 * Modify the postdata before it\'s inserted into the database
 *
 * @param Array $data
 * @param Array $postarr
 *
 * @return void
 */
function wpse345850_modify_postdata( $data, $postarr ) {

    if( \'post\' != $data[\'post_type\'] || $postarr[\'ID\'] ) {  // A $_POSTed ID means it\'s an update, not new
        return $data;
    }

    $data[\'post_name\'] = date( \'Y-m-d\' );

    return $data;

}
add_filter( \'wp_insert_post_data\', \'wpse345850_modify_postdata\', 10, 2 );
请注意,您必须更改上述帖子类型post 你想要的职位类型。

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。