我正在尝试更新和修改此问题的公认答案Copy SEO Meta Desc "Custom Field" to Excerpt field? 使用ACF自定义字段和不同的“if”逻辑。
我想检查帖子是否有一个名为body
; 如果有,请检查是否存在_aioseop_description
岗位字段;如果为空,请写入$add_description
到_aioseop_description
领域
但这对插件激活不起作用,调试中也没有错误。日志
我的“如果”逻辑正确吗?
register_activation_hook( __FILE__, \'wpse_activation_run\' );
function wpse_activation_run()
{
$args = array(
\'post_type\' => \'post\',
\'numberposts\' => -1,
\'post_status\' => \'published\',
);
$posts = get_posts( $args );
$body = get_field(\'body\');
foreach ( $posts as $post )
{
if (!empty($body) )
{
$add_description = get_field(\'body\'); substr($add_description, 0, 150);
$aioseop = get_post_meta( $post->ID, \'_aioseop_description\' ,true);
if (empty($aioseop) )
{
$po[\'_aioseop_description\'] = $add_description;
wp_update_post($po);
}
}
}
}
Update: 这很有效,而且更像是一种“重锤式”方法,因为它不会检查
_aioseop_description
字段已填充或ACF字段存在;这将覆盖
_aioseop_description
每次激活时的字段。这将适用于
post
和一个名为
body
. 它还使用
wp_trim_words
, 和用途
update_post_meta
而不是更新整个帖子。
register_activation_hook( __FILE__, \'wpse_activation_run\' );
function wpse_activation_run()
{
$args = array(
\'post_type\' => \'post\',
\'numberposts\' => -1,
\'post_status\' => \'published\',
);
$posts = get_posts( $args );
foreach ( $posts as $post )
{
$add_description = get_field(\'body\', $post->ID);
$trimmed = wp_trim_words( $add_description, $num_words = 20,\'\' );
update_post_meta( $post->ID, \'_aioseop_description\', $trimmed );
}
最合适的回答,由SO网友:Jacob Peattie 整理而成
我注意到两件事:get_field()
未指定要从中获取字段的帖子,这在循环之外是必需的:
$add_description = get_field( \'body\', $post->ID );`
要设置post元值,您应该使用
update_post_meta()
, 不
wp_update_post()
:
update_post_meta( $post->ID, \'_aioseop_description\', $add_description );