ACF关系-仅限于特定页面

时间:2015-05-06 作者:Liu Kang

在高级自定义字段中,我想限制关系字段(http://www.advancedcustomfields.com/resources/relationship/) 到特定页面。

由于各种原因,目前对我来说,为自定义帖子类型开具发票并不是一个解决方案。

这是我的网站地图:

website.com
website.com/contact/
website.com/help/
website.com/map/
website.com/hunting-products/
website.com/hunting-products/scopes/
website.com/hunting-products/rifles/
website.com/fishing-products/
website.com/fishing-products/fishing-rods/
website.com/fishing-products/bait/
在Relationship字段中,我想对其进行筛选,以便您只能选择这些产品。

website.com/hunting-products/scopes/
website.com/hunting-products/rifles/
website.com/fishing-products/fishing-rods/
website.com/fishing-products/bait/

3 个回复
最合适的回答,由SO网友:Liu Kang 整理而成

找到了一个有效的解决方案:

add_filter(\'acf/fields/relationship/query/name=products\', \'exclude_id\', 10, 3);

function exclude_id ( $args, $field, $post ) {

    $args[\'post__not_in\'] = array( $post, 9, 10, 11 );

    return $args;
}
在函数中添加。这将排除id为9、10和11的页面。

SO网友:JoshuaDoshua

在里面register_taxonomy 你可以通过page 作为关联的帖子类型,它将成为编辑屏幕上的一个选项

register_taxonomy( \'custom_tax\', \'page\', $args );

http://codex.wordpress.org/Function_Reference/register_taxonomy

SO网友:mica

我也有类似的问题。我需要restrict 关系字段选择posts owned by Current User 但授予对“编辑器”的完全访问权限(&P);“管理员”。

下面是插入到functions.php 文件

<?php
function modify_field( $args, $field,$post) {
    if( !check_user_role(array(\'editor\',\'administrator\')) ){
        $args[\'author\'] = get_current_user_id();
    }
    return $args;
}

    add_filter( \'acf/fields/post_object/query/key=field_XXX..XXX\', \'modify_field\', 10, 3 );

/* @src & @credits https://wp-mix.com/wordpress-check-user-roles/ */
function check_user_role($roles, $user_id = null) {
    if ($user_id) $user = get_userdata($user_id);
    else $user = wp_get_current_user();
    if (empty($user)) return false;

    foreach ($user->roles as $role) {
        if (in_array($role, $roles)) {
            return true;
        }
    }
    return false;
}
?>

结束

相关推荐

ACF关系-仅限于特定页面 - 小码农CODE - 行之有效找到问题解决它

ACF关系-仅限于特定页面

时间:2015-05-06 作者:Liu Kang

在高级自定义字段中,我想限制关系字段(http://www.advancedcustomfields.com/resources/relationship/) 到特定页面。

由于各种原因,目前对我来说,为自定义帖子类型开具发票并不是一个解决方案。

这是我的网站地图:

website.com
website.com/contact/
website.com/help/
website.com/map/
website.com/hunting-products/
website.com/hunting-products/scopes/
website.com/hunting-products/rifles/
website.com/fishing-products/
website.com/fishing-products/fishing-rods/
website.com/fishing-products/bait/
在Relationship字段中,我想对其进行筛选,以便您只能选择这些产品。

website.com/hunting-products/scopes/
website.com/hunting-products/rifles/
website.com/fishing-products/fishing-rods/
website.com/fishing-products/bait/

3 个回复
最合适的回答,由SO网友:Liu Kang 整理而成

找到了一个有效的解决方案:

add_filter(\'acf/fields/relationship/query/name=products\', \'exclude_id\', 10, 3);

function exclude_id ( $args, $field, $post ) {

    $args[\'post__not_in\'] = array( $post, 9, 10, 11 );

    return $args;
}
在函数中添加。这将排除id为9、10和11的页面。

SO网友:JoshuaDoshua

在里面register_taxonomy 你可以通过page 作为关联的帖子类型,它将成为编辑屏幕上的一个选项

register_taxonomy( \'custom_tax\', \'page\', $args );

http://codex.wordpress.org/Function_Reference/register_taxonomy

SO网友:mica

我也有类似的问题。我需要restrict 关系字段选择posts owned by Current User 但授予对“编辑器”的完全访问权限(&P);“管理员”。

下面是插入到functions.php 文件

<?php
function modify_field( $args, $field,$post) {
    if( !check_user_role(array(\'editor\',\'administrator\')) ){
        $args[\'author\'] = get_current_user_id();
    }
    return $args;
}

    add_filter( \'acf/fields/post_object/query/key=field_XXX..XXX\', \'modify_field\', 10, 3 );

/* @src & @credits https://wp-mix.com/wordpress-check-user-roles/ */
function check_user_role($roles, $user_id = null) {
    if ($user_id) $user = get_userdata($user_id);
    else $user = wp_get_current_user();
    if (empty($user)) return false;

    foreach ($user->roles as $role) {
        if (in_array($role, $roles)) {
            return true;
        }
    }
    return false;
}
?>

相关推荐