搜尋
首頁後端開發php教程第八批模板標籤的Tuts+指南

第八批模板標籤的Tuts+指南

在本系列的第八部分中,我們瀏覽了第七批 WordPress 範本標籤。在第九部分中,我們將瀏覽最後一批近 200 個範本標籤。在整個教學課程中,我們將看到有關書籤的範本標籤以及其他「雜項」範本標籤。

有關書籤的警告:從 WordPress 3.5 開始,「書籤」預設在管理面板中隱藏。要使用書籤,您需要安裝連結管理器外掛程式。

取得並顯示書籤清單:wp_list_bookmarks()

此模板標記返回或回顯書籤列表,這是 WordPress 的舊功能。

參數

此範本標記僅接受一個參數:

    <li> $args (可選—陣列)

    以下參數的陣列:

      <li> 'orderby'(字串):如何排序書籤。接受「名稱」、「link_id」、「url」、「目標」、「描述」、「所有者」(加書籤的使用者)、「評級」、「更新」(更新日期)、「rel」(XFN)書籤關係)、'notes'、'rss'、'length'(書籤名稱長度)、'rand'(隨機)。

      (預設:'name')

      <li> 'order'(字串):是否按升序('ASC')或降序('DESC')排序項目。

      (預設:'ASC')

      <li> 'limit'(整數):要顯示的項目數。

      (預設:-1 表示所有書籤)

      <li> 'category'(字串):以逗號分隔的類別 ID,從中取得項目。

      (預設值:' ' 表示所有類別)

      <li> 'exclude_category'(字串):要排除的書籤類別 ID。

      (預設:' ')

      <li> 'category_name'(字串):顯示書籤的類別名稱(覆蓋'category')。

      (預設:'')

      <li> 'hide_invisible'(整數):是否隱藏不可見連結或顯示它們。

      (預設:1)

      <li> 'show_updated'(整數):是否顯示最後更新的時間戳記。

      (預設:0)

      <li> 'echo'(整數):是否回顯輸出(1)或傳回它(0)。

      (預設:1)

      <li> 'categorize'(整數):是否以類別將書籤分組(1)或不依類別(0)。

      (預設:1)

      <li> 'title_li'(字串):使用 <li> 標記包裝輸出,並在書籤清單之前顯示標題。您可能希望將其設為空字串並停用換行。

      (預設:「書籤」)

      <li> 'title_before'(字串):在每個標題之前新增的 HTML 程式碼。

      (預設:'

      ')

      <li> 'title_after'(字串):在每個標題後面新增的 HTML 程式碼。

      (預設:'')

      <li> 'class'(字串):新增到每個類別的 CSS 類別名稱。

      (預設:'linkcat')

      <li> 'category_before'(字串):在每個類別之前新增的 HTML 程式碼。

      (預設:'

    • ')
    • <li> 'category_after'(字串):在每個類別之後新增的 HTML 程式碼。

      (預設:'

      ')
    <li> 'category_orderby'(字串):如何對類別進行排序。接受「name」、「id」、「slug」和「count」。

    (預設:「name」)

    <li> 'category_order'(字串):是否按升序('ASC')或降序('DESC')對類別進行排序。

    (預設:'ASC')

用法

<?php

$args = array(
    
    // Random order.
    'orderby' => 'rand',
    
    // Take just 5 bookmarks.
    'limit' => 5,
    
    // Take bookmarks from a specific category.
    'category_name' => 'Friends',
    
    // Don't echo.
    'echo' => 0,
    
    // Custom class.
    'class' => 'friends-bookmark-list'
    
);

$bookmarks_list = wp_list_bookmarks( $args );

?>

取得所有書籤的陣列:get_bookmarks()

此範本標記傳回 WordPress 書籤的陣列。

參數

此範本標記僅接受一個參數:

    <li> $args (可選—陣列)

    以下參數的陣列:

      <li> 'orderby'(字串):如何對連結進行排序。接受「名稱」、「ID」、「標題」、「日期」等貼文欄位。

      (預設:「名稱」)

      <li> 'order'(字串):是否按升序('ASC')或降序('DESC')排序項目。

      (預設:'ASC')

      <li> 'limit'(整數):要顯示的項目數。

      (預設值:-1 表示全部)

      <li> 'category'(字串):以逗號分隔的類別 ID,從中取得項目。

      (預設:空)

      <li> 'category_name'(字串):從中取得項目的類別名稱。

      (默认:空)

      <li> 'hide_invisible'(整数或布尔值):是否显示或隐藏标记为“不可见”的链接。

      (默认:1|TRUE

      <li> 'show_updated'(整数或布尔值):是否显示书签上次更新时间。

      (默认:0|FALSE

      <li> 'include'(字符串):要包含的以逗号分隔的 ID 列表。

      (默认:空)

      <li> 'exclude'(字符串):要排除的 ID 的逗号分隔列表。

      (默认:空)

用法

<?php

$args = array(
    'orderby' => 'title',
    'order' => 'ASC',
    'limit' => 15,
    'hide_invisible' => false,
    'exclude' => '12,16,23'
);

$bookmarks_array =  get_bookmarks( $args );

?>

获取书签数据:get_bookmark()

此模板标记返回给定书签的所有数据。

参数

此模板标记接受三个参数:

    <li> $bookmark (必需 - 混合)

    书签 ID 或对象。

    (默认:NULL >

    <li> $output (可选 - 字符串)

    OBJECT、ARRAY_N 或 ARRAY_A 常量。

    (默认:OBJECT

    <li> $filter (可选—字符串)

    是否转义输出。如果您想过滤输出,请将其设置为“display”。

    (默认:“raw”)

用法

<?php

// Getting a specific bookmark's fields with escaping the output.
$bookmark_data( 19, OBJECT, 'display' );

?>

获取单个书签字段的数据:get_bookmark_field()

此模板标记可让您获取单个书签字段的数据。

参数

此模板标记接受三个参数:

    <li> $field (必填—字符串)

    字段名称。

    (默认:NULL

    <li> $bookmark (必需 — 整数)

    书签 ID。

    (默认:NULL

    <li> $context (可选—字符串)

    如何过滤字段值—“raw”、“edit”、“attribute”、“js”、“db” ',或'显示'。

    (默认:'显示')

用法

<?php

// Get the bookmark with the id 16 and escape & echo its title.
echo get_bookmark_field( 'title', 16, 'display' );

?>

获取并显示“编辑书签”链接:get_edit_bookmark_link() & edit_bookmark_link()

这些模板标签可让您获取或回显“编辑此书签”链接以在模板中使用。

参数

get_edit_bookmark_link() 只接受一个参数:

    <li> $bookmark_id (必需 - 整数)

    书签的 ID。

    (默认:0)

edit_bookmark_link() 接受四个参数:

    <li> $text (可选—字符串)

    显示链接的文本。

    (默认:“编辑此”) EM>

    <li> $before (可选—字符串)

    在输出之前显示的文本或 HTML 代码。

    (默认:空)

    <li> $after (可选—字符串)

    输出后显示的文本或 HTML 代码。

    (默认:空)

    <li> $bookmark_id (必需 - 整数)

    书签的 ID。

    (默认:NULL >

用法

<?php

// Retrieve the current bookmark's "edit bookmark" link.
$edit_bookmark_link = get_edit_bookmark_link();

// Retrieve a specific bookmark's "edit bookmark" link.
$edit_bookmark_link = get_edit_bookmark_link( 98 );

// Display the current bookmark's "edit bookmark" link.
edit_bookmark_link( __( 'Edit', 'translation-domain' ), '<strong>', '</strong>' );

// Display a specific bookmark's "edit bookmark" link.
edit_bookmark_link( __( 'Edit', 'translation-domain' ), '', '', 98 );

?>

获取并显示您网站的信息:get_bloginfo() & bloginfo()

这些非常流行的模板标签返回并显示您网站的一般信息。

参数

get_bloginfo() 接受两个参数:

    <li> $show (可选—字符串)

    要获取的信息位。以下值之一:

      <li> 'url'(字符串):主页 URL。 <li> 'wpurl'(字符串):安装 WordPress 的 URL。 <li> 'description'(字符串):站点描述。 <li> 'rdf_url'(字符串):RDF/RSS 1.0 提要 URL。 <li> 'rss_url'(字符串):RSS 0.92 提要 URL。 <li> 'rss2_url'(字符串):RSS 2.0 提要 URL。 <li> 'atom_url'(字符串):Atom 提要 URL。 <li> 'comments_rss2_url'(字符串):评论的 RSS 2.0 提要 URL。 <li> 'comments_atom_url'(字符串):评论的 Atom 提要 URL。 <li> 'pingback_url'(字符串):pingback XML-RPC 文件的 URL。 <li> 'stylesheet_url'(字符串):主题主 CSS 文件的 URL。 <li> 'stylesheet_directory'(字符串):主题主 CSS 文件目录的 URL。 <li> 'template_directory''template_url' (字符串):活动主题目录的 URL。 <li> 'admin_email'(字符串):安装WordPress时输入的电子邮件地址。 <li> 'charset'(字符串):站点的字符集。 <li> 'html_type'(字符串):WordPress HTML 页面的内容类型。 <li> 'version'(字符串):WordPress 版本。 <li> 'language'(字符串):WordPress 安装的语言。 <li> 'text_direction'(字符串):语言的文本方向。 <li> 'name'(字符串):站点名称。
    (默认:'名称') <li> $filter (可选—字符串)

    将其设置为 'filter' 以过滤从此模板标记返回的 URL。

    (默认:'原始')

bloginfo() 只接受一个参数:

    <li> $show (可选—字符串)

    与上面相同的详细信息。

    (默认:'blogname')

用法

<?php

// Display the name of the site.
bloginfo();

// Get the stylesheet url.
$stylesheet = get_bloginfo( 'stylesheet_url' );

// Display the WordPress version.
bloginfo( 'version' );

?>

获取并显示自动 类:get_body_class() & body_class()

这些非常流行的模板标签生成语义类并让我们回显或返回它们。他们还让我们添加额外的类名。

参数

两个模板标签只接受一个参数:

    <li> $class (可选 - 字符串或数组)

    要添加的额外 CSS 类名称。

    (默认:空) EM>

用法

<?php

// Display the body class.
body_class();

// Retrieve the body class with an extra class.
$body_class = get_body_class( 'mytheme-body' );

?>

获取并显示导航菜单:wp_nav_menu()

此模板标签返回或显示导航菜单,这是 WordPress 的核心功能。您可能会在 2013 年或以后发布的所有新 WordPress 主题中看到此模板标签。

参数

此模板标记仅接受一个参数:

    <li> $args (可选—数组)

    以下参数的数组:

      <li> 'menu'(字符串):菜单的 ID、slug 或名称。

      (默认:空)

      <li> 'menu_class'(字符串):菜单的 UL 元素的 CSS 类。

      (默认:'menu')

      <li> 'menu_id'(字符串):菜单的 UL 元素的 ID。

      (默认:菜单slug,递增)

      <li> 'container' (string): 是否包裹UL,以及用什么包裹它。

      (默认:DIV

      <li> 'container_class'(字符串):包装元素的 CSS 类。

      (默认:'menu-{menu slug}-container')

      <li> 'container_id'(字符串):包装元素的 ID。

      (默认:空)

      <li> 'fallback_cb' (回调或布尔值):菜单不存在时运行的后备函数的名称。设置为 false 则不进行回退。

      (默认:'wp_page_menu'

      <li> 'before'(字符串):链接文本之前的文本。

      (默认:空)

      <li> 'after'(字符串):链接文本后的文本。

      (默认:空)

      <li> 'link_before'(字符串):链接之前的文本。

      (默认:空)

      <li> 'link_after'(字符串):链接后的文本。

      (默认:空)

      <li> 'echo' (boolean): 是否回显模板标签。

      (默认: TRUE)

      <li> 'depth'(整数):要包含多少级层次结构。

      (默认:0,表示所有级别)

      <li> 'walker'(对象):自定义 walker 类的实例。

      (默认:空)

      <li> 'theme_location'(字符串):要使用的主题位置。必须使用 register_nav_menu() 注册才能被用户选择。

      (默认:空)

      <li> 'items_wrap'(字符串):列表项应如何包装。

      (默认:<ul id="%1$s" class="%2$s ">%3$s</ul>)

用法

<?php

$args = array(
    'container_id' => 'primary-nav',
    'link_before' => '<i class="icon-link"></i>',
    'theme_location' => 'primary'
);

wp_nav_menu( $args );

?>

获取并显示页面标题:wp_title()

此模板标记返回或回显您页面的页面标题。

参数

此模板标记接受三个参数:

    <li> $sep (可选 — 字符串)

    用作分隔符的文本。

    (默认值:'»' )

    <li> $echo (可选—布尔值)

    是否回显(TRUE)或返回(FALSE)标签。

    (默认:TRUE

    <li> $seplocation (可选—字符串)

    分隔符的位置和面包屑的方向。将其设置为“right”以反转面包屑。

    (默认:空)

用法

<?php

wp_title( ' - ', true );

// Reverse the separator location to use left-hand indicators.
$page_title = wp_title( ' &laquo ', false, 'right' );

?>

获取并显示主页 URL:get_home_url() & home_url()

这些模板标签仅返回主页 URL。

参数

get_home_url() 接受三个参数:

    <li> $blog_id (可选—整数)

    博客的 ID。

    (默认:NULL >

    <li> $path (可选—字符串)

    附加到 URL 的可选路径。

    (默认:空) >

    <li> $scheme (可选—字符串)

    提供主页 URL 上下文的方案(“http”、“https”或“相对”)。

    (默认:NULL

并且 home_url() 接受两个参数:

    <li> $path (可选—字符串)

    附加到 URL 的可选路径。

    (默认:空) >

    <li> $scheme (可选—字符串)

    提供主页 URL 上下文的方案(“http”、“https”或“相对”)。

    (默认:NULL

不要将这两个函数误认为“一个返回输出,另一个显示它”——我知道我就是这么做的。区别有点奇怪: get_home_url() 函数返回特定博客的主页 URL,而 home_url() 函数返回当前站点.请记住:它们都没有回应任何内容!

用法

<?php

// Getting a specific blog's home url with https.
$home_url_of_petes_blog = get_home_url( 2, '', 'https' );

// Echoes the current home url with a little addition.
echo home_url( '?rel=navlink' );

?>

获取并显示站点 URL:get_site_url() & site_url()

这些模板标签获取并回显“站点 URL”,即安装 WordPress 的地址。

参数

get_site_url() 接受三个参数:

    <li> $blog_id (可选 - 整数)

    博客的 ID。

    (默认:当前站点)

    <li> $path (可选—字符串)

    附加到 URL 的可选路径。

    (默认:空) >

    <li> $scheme (可选—字符串)

    提供主页 URL 上下文的方案(“http”、“https”或“相对”)。

    (默认:正常或安全连接,取决于is_ssl()

并且 site_url() 接受两个参数:

    <li> $path (可选—字符串)

    附加到 URL 的可选路径。

    (默认:空) >

    <li> $scheme (可选—字符串)

    提供主页 URL 上下文的方案(“http”、“https”或“相对”)。

    (默认:正常或安全连接,取决于is_ssl()

home_url()get_home_url() 一样,不要将这两个函数误认为“一个返回输出,另一个显示输出”。 get_site_url() 函数返回特定博客的站点 URL,而 site_url() 函数返回当前站点的站点 URL。请记住:它们都没有回应任何内容!

用法

<?php

// Getting a specific blog's site url with https.
$site_url_of_janes_blog = get_site_url( 3, '', 'https' );

// Echoes the current site url.
echo site_url();

?>

获取当前站点的 ID:get_current_blog_id()

此模板标记仅返回多站点网络中当前站点的 ID。

参数

此模板标记不接受任何参数。

用法

<?php

get_current_blog_id();

?>

获取并显示管理面板的 URL:get_admin_url() & admin_url()

这些模板标签返回并显示您网站仪表板的 URL。

参数

get_admin_url() 接受三个参数:

    <li> $blog_id (可选 - 整数)

    博客的 ID。

    (默认:当前站点)

    <li> $path (可选—字符串)

    附加到 URL 的可选路径。

    (默认:空) >

    <li> $scheme (可选 - 字符串)

    要使用的方案。 “admin”遵循定义的方案(使用 is_ssl() 函数),但您可以通过设置此参数来覆盖它。接受“http”、“https”、“admin”、“rpc”、“login”和“login_post”。

    (默认:“admin”)

并且 admin_url() 接受两个参数:

    <li> $path (可选—字符串)

    附加到 URL 的可选路径。

    (默认:空) >

    <li> $scheme (可选 - 字符串)

    要使用的方案。 “admin”遵循定义的方案(使用 is_ssl() 函数),但您可以通过将此参数设置为“http”或“https”来覆盖它。

    (默认值:“管理员')

用法

<?php

// Get the dashboard url of the current blog.
$admin_url = get_admin_url();

// Display the admin url and force a secure connection.
admin_url( '', 'https' );

?>

获取并显示 Feed 类型的固定链接:get_feed_link() & the_feed_link()

这些模板标记返回并输出提要的永久链接。

参数

get_feed_link() 只接受一个参数:

    <li> $feed_type (可选 — 字符串)

    提要类型。

    (默认:默认提要类型)

并且 the_feed_link() 接受两个参数:

    <li> $anchor (必需 — 字符串)

    链接显示的文本。

    (默认:NULL) EM>

    <li> $feed_type (可选 — 字符串)

    提要类型。

    (默认:默认提要类型)

用法

<?php

// Get default feed type's link.
get_feed_link();

// Display a link for the "atom" feed.
the_feed_link( __( 'Atom Feed', 'translation-domain' ), 'atom' );

?>

使字符串结尾有或没有尾部斜杠:user_trailingslashit()

此模板标记检查您的永久链接结构,并在给定 URL 末尾添加尾部斜杠或删除现有的尾部斜杠。

参数

此模板标记接受两个参数:

    <li> $string (必需 — 字符串)

    带或不带尾部斜杠的 URL。

    (默认:NULL

    <li> $type_of_url (已弃用 - 字符串)

    这在技术上并没有被弃用,但它没有在函数中使用,因此它没有任何效果。

用法

<?php

$url_to_fix = user_trailingslashit( get_home_url() . 'some-special-page' );

?>

获取自本周开始以来的天数:calendar_week_mod()

这个奇怪的模板标签获取自一周开始以来的天数。它基本上是一个“模运算”。

老实说,我不知道如何使用它或为什么使用它。如果您知道为什么存在此模板标签,请发表评论以告知我和我们的读者!

参数

此模板标记仅接受一个参数:

    <li> $number (必需 - 整数)

    自本周开始以来的天数。

    (默认值:0) >

用法

<?php

// Umm...
echo calendar_week_mod( 199 );

// Right? (it echoes "3" by the way).

?>

获取并显示日历:get_calendar()

还记得我们曾经放在博客侧边栏中的那些日历吗?此模板标记正是这样做的:它返回或显示日历。

参数

此模板标记接受两个参数:

    <li> $initial (可选 - 布尔值)

    使用初始日历名称 (TRUE) 或不使用 (FALSE)。

    (默认:TRUE

    <li> $echo (可选—布尔值)

    是否回显(TRUE)或返回(FALSE)输出。

    (默认:TRUE

用法

<?php

// Return the calendar.
$my_calendar = get_calendar( true, false );

// Display the calendar. 
get_calendar();

?>

结论

希望您喜欢最后一批模板标签。在下一部分,即系列结局中,我们将回顾我们所学到的内容并结束该系列。

如果您有任何问题、意见或更正,您可以在评论部分与我们分享您的想法。如果您喜欢这篇文章,请不要忘记与您的朋友分享!

以上是第八批模板標籤的Tuts+指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具