source

워드프레스 필터 문서?add_filter()를 이해하려고 합니다.

goodcode 2023. 2. 14. 23:12
반응형

워드프레스 필터 문서?add_filter()를 이해하려고 합니다.

설명서를 여러 번 읽었는데 함수에 무슨 일이 일어나고 있는지 알아내는데 어려움을 겪고 있습니다.문서를 보고 소스코드도 보고 점점 더 혼란스러워집니다.

add_filter($tag, $hook, $priority, $args);

새로운 기능이 부모 기능을 확장한 것 같습니다.난 후크의 어떤 부분이 오버라이드 되느냐가 문제지문서의 몇 가지 예에서는 일부 변수가 새로운 $tag의 $190으로 대체되어 있는 것을 알 수 있습니다.

http://www.andrewnacin.com/2010/05/18/rethinking-template-tags-in-plugins/에서 거의 모든 것을 이해했습니다.

하지만 어떻게 논쟁을 넘기고 결국엔 어떤 게 무시되는지 알 수가 없었어요

잘 부탁드립니다.

add_filter()는 의 동반 입니다.apply_filters().전에apply_filters필터에 된다('필터').$tag합니다.add_filter()를수 있습니다.add_filter태그를 위한 필터를 등록합니다.apply_filters()이 태그명으로 실행되면 등록된 모든 필터가 순서대로 호출됩니다.필터는 조작 기능을 통해 데이터를 전달하는 데 사용됩니다.wp_list_pages의 페이지입니다.페이지 목록에서 줄 바꿈을 제거하는 데 사용합니다.작동 방식은 다음과 같습니다.

먼저 하나의 파라미터를 취득하고 그 파라미터를 조작한 후 반환하는 함수를 정의합니다.

function my_list_pages_filter($pages){
  $pages = preg_replace( array("\n","\r"), '', $pages );
  return $pages;
}

다음으로 필터 훅을 추가합니다.add_filter ( 'wp_list_pages', 'my_list_pages_filter').

add_filter는 WordPress에 "WordPress 기능이 때"를 나타냅니다.apply_filters인 상태에서 은 'wp_list_pages'입니다.my_list_pages_filter" 의 값 등1 개의 값을 합니다." 필터는 1 개의 값을 반환합니다.필터는 함수가 1 개의 값을 반환하는 것을 상정하고 있습니다.

이러한 기능을 통해 입력을 다시 보내기 전에 조작할 수 있습니다.

do_action츠키다필터 기능에 정보를 송신하려면 , 다음의 순서를 실행합니다(예에서 참조).

<div id="content" <?php $class='post post_content'; echo apply_filters('my_custom_classes', $class); ?>>

그리고 당신의 직무에.php 파일 추가:

add_filter('my_custom_classes','my_custom_classes_function');
function my_custom_classes_function($classes){
  $output 'class="'. $classes.'"';
  return $output;
}

필터의 기본적인 사용법이지만, 이것은 시작입니다.몇 가지 확장 기능을 통해 동일한 예제의 필터를 사용할 수 있는 방법을 실제로 파악할 수 있습니다.

function my_custom_classes_function($classes){
  $classes = explode( ' ', $classes );
  if(is_home())
    $classes[] = 'home_content';
  if(is_single())
    $classes[] = 'single_content';
  if(is_page())
    $classes[] = 'page_content';
  if(is_tag())
    $classes[] = 'tag_content';
  $output 'class="'. implode( ' ', $classes ) .'"';
  return $output;
}

크리스, 당신은 몇 가지 일로 혼란스러워하는 것 같군요.

  1. 필터와 액션은 관련되지 않습니다(둘 다 WP가 '훅'이라고 부르는 타입이지만 그 외에는 관련이 없습니다).위에서 "with my filter..."라고 했는데 do_action()은 필터가 아닌 액션용입니다.
  2. Tag(예를 들어 add_filter, apply_filter, add_action, do_action에 대한 태그 매개 변수)는 XML/HTML 의미의 태그와는 관련이 없습니다(알고 있을 수도 있음).
  3. 액션을 호출할 때 do_action()을 사용하여 필수 태그 이름 외에 인수를 전달해야 합니다.위에서 do_action('content_class')이라고 불렀습니다.첫 번째로 태그명이 "content_class"인 액션을 등록하지 않으면 효과가 없습니다.다음으로 액션 함수 content_class_filter(필터와는 무관하므로 content_class_action으로 명명하는 것이 좋습니다)에는 옵션 파라미터 $classes가 있습니다.태그 이름 뒤에 do_action 인수를 지정하지 않았기 때문에 항상 " 입니다.또한 $output = .. 라고 쓰려고 했을 수도 있습니다.
  4. 필터는 어떤 것도 "덮어쓰기"하지 않습니다(특히 OO 언어 의미).동일한 태그를 가진 여러 필터를 추가하면 태그의 apply_filters가 호출될 때 모두 호출됩니다.priority 파라미터를 사용하여 순서를 제어할 수 있습니다.액션도 마찬가지입니다.

그것은 매우 좋은 기사지만, 그럼에도 불구하고 나는 뭔가 어리석은 실수를 해야 한다.

다음 "add_filter" 기술을 사용하여 "Screen Options" 아래의 WP3+ 탐색 메뉴에서 일부 항목을 삭제하려고 합니다.

wp-admin/param/nav-param.php:

function wp_nav_menu_manage_columns() {
    return array(
        '_title' => __('Show advanced menu properties'),
        'cb' => '<input type="checkbox" />',
        'link-target' => __('Link Target'),
        'css-classes' => __('CSS Classes'),
        'xfn' => __('Link Relationship (XFN)'),
        'description' => __('Description'),
    );
}

mytheme/function.php:

원래 함수는 일부 클래스의 일부가 아닌 것 같습니다.

add_filter('wp_nav_menu_manage_columns', 'new_wp_nav_menu_manage_columns');
function new_wp_nav_menu_manage_columns() {
    return array(
        '_title' => __('Show advanced menu properties'),
        'cb' => '<input type="checkbox" />',
        'link-target' => __('Link Target'),
    );
}

그 결과, 원래의 「스크린 옵션」과 모든 항목이 표시됩니다.WP 코어에서 직접 'css-timeout' => _('CSS Classes'), 'link Relationship (XFN)', 'description' => __('Description')' 행을 삭제하면 모든 것이 정상으로 보이므로 이 WPCTons를 덮어쓸 수 있을지 모르겠습니다.

조언해 주셔서 감사합니다.안부를 전합니다, 마일로

템플릿 파일에 후크를 배치했습니다.

<div id="content" <?php content_class() ?>>

후크는 함수 파일에서 자동으로 실행됩니다.

function content_class() {
 do_action('content_class');
}

필터를 사용하여 이 함수에 수업을 전달하려고 합니다.

function content_class_filter($classes='') {
   $output 'classes="'. $classes.'"';
   return $output;
}

드디어 필터 쓰는 법도 헷갈리네요

언급URL : https://stackoverflow.com/questions/2983616/wordpress-filters-documentation-trying-to-understand-add-filter

반응형