在页面上显示使用ACF创建的自定义字段的所有值


9

我正在使用高级自定义字段/ ACF创建自定义字段。其中一个是显示一些选项的复选框列表(option1,option2,option3 ...)

现在,我想在前端的单独页面上显示此字段的所有选项,如下所示:

选项:
-选项1-
选项2-
选项3
-...

如何从ACF中检索带有键的所有选项?


请更清楚地了解您要实现的目标。构建ACF的目的是在前端显示自定义字段的输出,而不允许前端输入。
SickHippie 2012年

Answers:


16

get_field_objectACF功能可以被用来获取信息和选项的特定字段。

首先,您需要要输出的特定字段的字段关键字。编辑字段组时,单击页面顶部的屏幕选项标签。您应该看到一个用于切换字段键显示的选项(默认情况下,该键处于隐藏状态以节省空间):

字段键

获得密钥后,可以加载字段对象并输出其值:

$field_key = "field_5039a99716d1d";
$field = get_field_object($field_key);

if( $field )
{
    echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
            echo '<option value="' . $k . '">' . $v . '</option>';
        }
    echo '</select>';
}

如果我们可以像使用键一样容易地引用名称,那将是很好的。这样,如果在插件中具有此功能,并且曾经需要在启用了acf的另一个WordPress实例上对其进行测试,则不必因为在环境B中而寻找密钥并再次更改它
。– klewis

0

如果在选中复选框的情况下尝试输出某些内容,请使用:

<?php if(in_array('news', get_field('checkbox') )): ?>
    <h1>News was ticked!</h1>
<?php endif; ?>

如果您只想显示已选中选项的列表,请使用以下命令:

<p>Categories: <?php get_field('checkbox'); ?></p>

这将为您提供一系列值,您可以使用foreach声明来管理这些值。使用the_field('checkbox')将为您提供一个逗号分隔的选项字符串,您也可以拆分这些选项。

我还建议您访问ACF的站点并阅读文档。大多数此类问题都会在此处得到详细解答,并且开发人员也积极参与其支持论坛。

编辑:如果您想要输出到页面中以生成动态查询的可用选项列表,我就是这样。这是我昨天构建的,用于从给定的自定义字段键(使用ACF)中提取元值列表。我已经为您量身定做了。还有另一个用于处理ajax请求的JS,还有一个相当复杂的php,用于输出结果帖子。我无法真正重写它们-JS是标准的WP前向ajax调用/响应,而PHP则是对我们要显示的12个不​​同ACF字段(其中两个是中继器)的条件检查的混乱。基本内容是这里的代码,按钮onClick在一个单独的JS文件中调用ajax函数,而ajax函数本身的php本质上为查询设置了参数数组,$selectedOption$_POST['option']作为meta_value。将其馈送到a new WP_Query( $args );,然后将其用于循环中,其输出通过add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');和反馈回js add_action( 'wp_ajax_nopriv_the_ajax_hook', 'fetch_option_list' ); //for non logged-in users

 // Get list of meta_values for given meta_key and post_type (page, post, custom post type)
 function meta_list($key = '', $type = '', $status = 'publish'){
 global $wpdb;
    $r = $wpdb->get_col($wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = '%s'
    AND p.post_status = '%s'
    AND p.post_type = '%s'
    ORDER BY pm.meta_value ASC", $key, $status, $type));
    return $r;
}

 // ADD EG A FORM TO THE PAGE
 function meta_ajax_frontend(){
    $formlist = meta_list('metakey', 'posttype');
    echo '<form id="optionSelect">';
    echo '<select id="optionList" name="optionList">';
    foreach($formlist as $fl => $val) {
        echo '<option>' . $val . '</option>';
    }
    echo '</select>';
    echo '<input name="action" type="hidden" value="the_ajax_hook" />
    <input id="submit_button" value = "Search" type="button" onClick="fetch_meta();" />
    </form>
    <div id="meta_list">
    Please select an option from the list
    </div>';
 }

嗯,如果我这样做,我将输出分配给“职位”的选项,我需要的是在“页面”中显示所有选项作为选项的完整列表。
Bob

我很好奇您为什么需要在前端显示后端的选项列表。您是否只想显示选项列表以及在管理员中选择的项目?如果您尝试将其用作表单的一部分(允许用户更改已检查的数据),则这不是正确的插件或方法。但是,如果您希望将选项列表用作重写查询的预过滤器,则可能适合您。我很快将在此处用该代码编辑以上帖子。
SickHippie 2012年

嗨,我是鲍勃,还有另一个帐户,我需要后端的选项才能与它们创建一种“菜单”。我认为您的代码检索帖子和分配给他们的选项。我只需要一个选项列表,例如创建帖子时出现在后端的选项列表。我将继续使用您的代码,看看是否可以解决问题。感谢@SickHippie
Dunning-Kruger

不,它会拉出已从该复选框中选择的选项列表-也就是说,它说:“这是复选框,有些帖子已被分配值'选项1','选项2','选项4'从字面上看,它只是基于该meta_key提取meta_value列表。我需要它来生成动态列表,但是如果您创建了草稿后将选中所有复选框,它将为您拉出数组中的所有选项。我正在使用foreachto循环浏览。后面的功能通过ajax带来帖子列表,但我忽略了这一点
SickHippie 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.