我已经使用高级自定义字段在网站上创建了一个新区域。该区域显示在新帖子和修改后的帖子上,但不显示在旧帖子上。如何才能以最小的努力在所有帖子上显示它?
在2013 post中,我看到当时没有解决方案。
<div id="advert">
<a href="<?php echo get_field( 'add_ad_link' ); ?>">
<img src="<?php echo get_field( 'ad_image' ); ?>">
</a>
</div>
发布于 2016-11-10 18:47:20
您可以使用Benoti答案中的想法并将此代码片段粘贴到您的functions.php
中。对于您的情况,方法是:
add_action('admin_init', 'set_default_acf_values');
function set_default_acf_values() {
$args = [
'post_type' => 'post',
'posts_per_page' => -1,
];
$posts = get_posts($args);
foreach($posts as $post) {
if (empty(get_field('add_ad_link', $post->ID))) {
update_field('add_ad_link', DEFAULT_AD_LINK, $post->ID);
}
if (empty(get_field('ad_image', $post->ID))) {
update_field('ad_image', DEFAULT_AD_IMAGE, $post->ID);
}
}
}
为了简单起见,您的add_ad_image
字段应该设置为Image URL。
请注意,此代码将在您每次进入管理区时执行,因此在第一次进入管理区之后,最好将其删除(因为所有帖子现在都将具有这些字段的值)。
发布于 2016-11-09 03:48:55
我不使用ACF,但您可以循环遍历所有posts,并使用WordPress函数get_post_meta
和update_post_meta
应用自定义字段。
一个非常简单的例子,粘贴到functions.php中:
add_action('admin_init', 'apply_my_custom_field');
function apply_my_custom_field(){
if(!get_option('se_40493675')){
$args = array(
'post_type'=> 'post',
'posts_per_page' => -1,
'post_status'=> 'publish'
);
$posts = get_posts($args);
foreach($posts as $post){
if(!get_post_meta($post->ID, 'your_custom_field_name')){
update_post_meta($post->ID, 'your_custom_field_name', 'your_custom_field_value');
}
}
update_option('se_40493675', 1);
}
}
随心所欲地更改$args,即:'post_status'=> array('publish', 'pending', 'draft')
。
发布于 2016-11-10 19:49:51
也许你可以将acf的默认值用于还没有该字段的值的帖子。
如果您知道字段键如下所示,则可以获取ACF的默认值:
$field = get_field_object('Your_acf_field_key'));
$default_value = $field['default_value'];
要获取acf密钥,您必须查询数据库。我从这里得到了我的查询:How to get Advanced Custom Fields field key from WordPress database?
因此,如果只有fieldname,则获取默认值的代码将为:
function get_acf_key($field_name) {
global $wpdb;
return $wpdb->get_var("
SELECT `meta_key`
FROM $wpdb->postmeta
WHERE `meta_key` LIKE 'field_%' AND `meta_value` LIKE '%$field_name%';
");
}
$field = get_field_object(get_acf_key('Your_acf_name'));
$default_value = $field['default_value'];
请注意,acf密钥可能会在不同的环境中更改。
https://stackoverflow.com/questions/40493675
复制相似问题