php 自定义WYSIWYG字段 Package 属性的ACF筛选器-宽度

kb5ga3dv  于 2022-10-30  发布在  PHP
关注(0)|答案(1)|浏览(107)

我尝试通过load_fields筛选器为某些字段类型自定义ACF字段宽度。我成功地使用以下内容自定义了图像类型:

function acf_image_width($image_width) {
$i_width = '40';
if(empty($image_width['wrapper']['width'])) {
$image_width['wrapper']['width'] = $i_width;
} }
add_filter('acf/load_field/type=image','acf_image_width', 10);

这是使用值40预先填充图像类型 Package 器属性宽度。
对于WYSIWYG字段,我做了同样的操作,但是得到了一个错误。我做了这个操作,但是我确信我得到的WYSIWYG字段类型是错误的。

function acf_wysiwyg_width($content_width) {
$c_width = '60';
if(empty($content_width['wrapper']['width'])) {
$content_width['wrapper']['width'] = $c_width;
} }
add_filter('acf/load_field/type=wysiwyg','acf_wysiwyg_width', 10);

我试过acf_the_content,也不起作用。对字段类型的任何帮助都不胜感激。

8ftvxx2r

8ftvxx2r1#

使用acf/load_field过滤器时,请按照以下文档链接...
https://www.advancedcustomfields.com/resources/acf-load_field/
acf/load_field滤波器函数参数为...

  • $field(array)包含所有设置的字段数组。

所以你的两个函数参数都是错误的。不要把$image_width$content_width定义为你的函数参数,因为这只会让事情变得混乱,因为你实际上是把完整的$field设置作为一个数组传递。
只需将$field param array作为$field传递即可,因为acf/load_field筛选器会将字段设置作为数组传递到$field param中。
然后使用$field数组来更新、设置或覆盖当前数组值,并确保总是在acf/load_field过滤函数的末尾返回$field...

function acf_wysiwyg_width($field) {

  // dump field param contents so you can see the returned data
  // remove 2 lines below once your happy you know what your setting
  var_dump($field);
  exit;

  // then use $field param like this to override the array value (if these keys actually exist)
  $field['wrapper']['width'] = 60;

  // you must always return function param $field for acf/load_field filter to finish the job!
  return $field;

}
add_filter('acf/load_field/type=wysiwyg','acf_wysiwyg_width', 10);

因此在我的IDE(PhpStorm)中
如果我在acf_wysiwyg_width函数上面输入这个...

/**

然后点击enter/return,它会生成这些PHP注解...

/**
 * @param $field
 * @return void
 */

因此,在遵循任何WP或ACF文档中传递和返回的变量参数类型时,例如,在这种情况下,我将在传递的参数和返回类型上指定(array)(还添加了@see和文档URL,以参考我为该过滤器/操作函数遵循的文档...

/**
 * @see https://www.advancedcustomfields.com/resources/acf-load_field
 * @param $field (array)
 * @return $field (array)
 */
function acf_wysiwyg_width($field) {

    // then use $field param like this to override the array value (if these keys actually exist)
    $field['wrapper']['width'] = 60;

    // you must always return function param $field for acf/load_field filter to finish the job!
    return $field;

}

确定add_filter部分,数字10是该过滤器命中时的优先级。

add_filter('acf/load_field/type=wysiwyg','acf_wysiwyg_width', 10);

但是,当add_filter调用中的integer再次被设置时,它意味着函数中传递的参数的数量,因此在上面的示例中,只传递了1参数$field,这意味着您不需要声明一个传递的filter/action参数。
但是,如果add_filter调用有2参数要传递,例如使用此acf_wysiwyg_width函数,则需要将1传递的参数之上的任何内容定义到add_filter调用中,如下所示...

/**
 * @param $field (array)
 * @param $name (string)
 * @return $field (array)
 */
function acf_wysiwyg_width($field, $name) {

  // ...

  // return field array
  return $field

}

// 2 params $field and $name being passed through filter with priority 10
add_filter('acf/load_field/type=wysiwyg','acf_wysiwyg_width', 10, 2);

可能会有点混乱,但请仔细查看https://developer.wordpress.org/文档中的filter/action优先级、参数和返回类型。所有第三方文档(如ACF)也是如此。👍🏼

相关问题