Функция не вызывается при использовании цикла foreach - PullRequest
0 голосов
/ 21 ноября 2018

Я не очень разбираюсь в PHP, но мне нужно было написать несколько строк, чтобы добавить пользовательские ключи к ответу моего API в WordPress:

<?php
$customFields = array("maker", "model", "ou", "prod_year", "barrel_length", "stock", "stock_length", "ejector", "links",
    "chokes", "condition", "original_case", "price");

function rest_get_post_field( $post, $field_name, $request ) {
    return get_post_meta( $post[ 'id' ], $field_name, true );
}

add_action( 'rest_api_init', 'add_custom_fields' );
function add_custom_fields(){
    foreach($customFields as $field) {
        register_rest_field( 'post',$field,
        array(
            'get_callback'  => 'rest_get_post_field',
            'update_callback'   => null,
            'schema'            => null,)
        );
    }
}

?>

Приведенный выше код не работает.Сначала я собирался вызвать метод register_rest_field для каждого из настраиваемых полей, например, вот так:

function add_custom_fields(){
        register_rest_field( 'post','maker',
        array(
            'get_callback'  => 'rest_get_post_field',
            'update_callback'   => null,
            'schema'            => null,)
);

Я проверил это, и оно работает.Однако создание строкового массива имен пользовательских полей и последующее их циклирование кажется гораздо лучшим решением с гораздо меньшим количеством строк кода.Есть ли способ сделать эту работу?Благодарю.

1 Ответ

0 голосов
/ 21 ноября 2018

Поскольку ваша переменная customFields не является глобальной переменной, функция будет интерпретировать ее как ноль.Вам необходимо передать массив пользовательских ключей в качестве аргумента вашей функции.

function add_custom_fields($fields)
{
    foreach($fields as $field) {
        register_rest_field( 'post',$field,
        array(
            'get_callback'  => 'rest_get_post_field',
            'update_callback'   => null,
            'schema'            => null,)
        );
    }
}

Затем, в вашей функции add_action вам необходимо передать один аргумент.

add_action('rest_api_init', 'add_custom_fields', 10, 1);

И, наконец, вызовите функцию do_action , указав customFields переменную в качестве параметра вашей функции.

do_action('rest_api_init', $customFields)

Проверьте дополнительную информацию: Аргументы функции .


В качестве альтернативы (если то, что вам нужно сделать, это позволяет), просто определите свой собственный массив ключей внутри вашей функции.

function add_custom_fields()
{
    $customFields = array("maker", "model", "ou", "prod_year", "barrel_length", "stock", "stock_length", "ejector", "links", "chokes", "condition", "original_case", "price");
    foreach($customFields as $field) {
        register_rest_field( 'post',$field,
        array(
            'get_callback'  => 'rest_get_post_field',
            'update_callback'   => null,
            'schema'            => null,)
        );
    }
}
...