可以是$cptslug
根据ACF值动态确定值?
是的,它可以。
方法如下:
首先,我的ACF字段设置如下:
姓名:video_or_image
类型:选择选项:
1 : Video
0 : Image
所以我像这样注册post类型,其中重写slug设置为
%video_or_image%
—i、 e。
%{Name of the ACF field}%
, 但您不必遵循这种格式:
register_post_type( \'video\', array(
\'label\' => \'Video\',
\'public\' => true,
\'rewrite\' => array(
\'slug\' => \'%video_or_image%\',
),
...
) );
或者如果您想要或只能使用
register_post_type_args
要更改重写段塞,只需设置
$cptslug
到
%video_or_image%
.
接下来,我注册重写标记(%video_or_image%
) 在register_post_type()
呼叫,连接到init
措施:
add_rewrite_tag( \'%video_or_image%\', \'([^/]+)\' );
必须注册标记,并确保标记被RegEx模式正确替换(即。
([^/]+)
) 保存重写规则时:
然后我使用适当的(ACF)字段值替换重写标记post_type_link
过滤器:
add_filter( \'post_type_link\', function( $url, $post ){
if ( \'video\' === $post->post_type ) {
$value = get_field( \'video_or_image\', $post->ID );
$url = str_replace( \'%video_or_image%\', $value, $url );
}
return $url;
}, 10, 2 );
仅此而已,但别忘了刷新重写规则—只需访问永久链接设置页面。
我建议您为ACF字段设置一个默认值,并尽可能使用“更好”的值。。我是说,除了1
或0
.. 但如果你对这些值有把握,那么(我认为)没关系
在我的情况下,仅使用([^/]+)
在“重写”标记中,在加载页面(即。page
职位类型):
add_rewrite_tag( \'%video_or_image%\', \'([^/]+)\' );
How I solved the problem
<使用唯一标识符,例如。
v/
例如:
add_rewrite_tag( \'%video_or_image%\', \'v/([^/]+)\' );
然后在后permalink中,
v/
还应添加到重写标记替换值中&mdash;请参阅上面的步骤#4:
$url = str_replace( \'%video_or_image%\', \'v/\' . $value, $url );
我将ACF字段值限制为数字,然后使用:
add_rewrite_tag( \'%video_or_image%\', \'(\\d+)\' );
那个
(\\d+)
不保证与其他重写规则没有冲突,但至少在我的情况下,它是有效的。
很抱歉([^/]+)
&mdash;我以为0
和1
价值观只是一个例子。我应该用(\\d+)
.