我试图在functions.php中获取正在编辑的帖子的ID,以动态重写自定义帖子类型的子弹。
这是我目前正在使用的。
function change_post_type_slug( $args, $post_type ) {
if ( 'custom_post' == $post_type ) {
global $post;
$location = get_field('custom_field', $post->ID);
$args['rewrite']['slug'] = $location;
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );
我不确定在获取ID之前,钩子register_post_type_args
是否正在触发,或者这甚至不是执行我要完成的任务的最佳方法。在该主题上找不到很多东西。
我能够使其与以下产品一起使用:
function change_post_type_slug( $args, $post_type ) {
if ( 'lead_page' == $post_type ) {
$post_id = $_GET['post'];
$location = get_field('leadpage_location', $post_id);
$args['rewrite']['slug'] = $location->post_name;
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );
但是它导致在前端发出通知:
Notice: Undefined index: post in /path/to/wordpress/functions.php on line 623
第623行是$post_id = $_GET['post'];
答案 0 :(得分:0)
更新:
尝试一下:
function change_post_types_slug( $args, $post_type ) {
if ( 'your-custom_post' === $post_type ) {
// Check and get the custom post ID
$id = isset($_GET[ 'post' ]) ? $_GET[ 'post' ] : '' ;
// $location = get_field('leadpage_location', $id);
$args['rewrite']['slug'] = 'new-slug-here';
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );
答案 1 :(得分:0)
为此,您应该使用updated_postmeta
钩子,因为它在每次更新自定义字段时都会运行。
然后,您可以使用wp_update_post()
功能更新帖子数据。
add_action( 'updated_postmeta', function( $meta_id, $object_id, $meta_key, $meta_value ) {
if ( 'location' === $meta_key ) {
wp_update_post([
'ID' => $object_id,
'post_name' => $meta_value,
]);
}
}, 10, 4 );
答案 2 :(得分:0)
尝试一下:
function change_post_type_slug( $args, $post_type ) {
if ( 'lead_page' === $post_type && is_admin() && $_GET['action'] === 'edit' ) {
$post_id = $_GET['post'];
$location = get_field('leadpage_location', $post_id);
$args['rewrite']['slug'] = $location->post_name;
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );
它添加了另外两个条件,以检查您是否在管理屏幕上并检查GET
的{{1}}参数。同样可能edit
可能会过分杀伤,但现在您超级安全。