给WordPress帖子添加过期日期

我运行了一些网站,这些网站在其主页的横幅中包含通知和重要信息。我倾向于为此使用自定义帖子类型,添加横幅并在主题中需要的位置显示它们。 (如果您想做类似的事情,本教程中对此进行了解释。)

但我的横幅总是有到期日。例如,它们可能包含有关即将举行的活动或职位空缺的信息。一旦活动结束或职位空缺被填补,我就必须进入网站并手动删除该帖子。

如果在创建此类帖子时,我可以给它们一个到期日期,那么它们将不再在我的网站上可见,那就容易多了。

在本教程中,我将向您展示如何做到这一点。共有三个步骤:

在帖子编辑屏幕中为到期日期创建一个元框。将 jQuery UI 日期选择器应用到元框字段以增强界面。最后,使用 pre_get_posts 挂钩确保不会显示过期日期的帖子。

您需要什么

要完成本教程,您需要:

WordPress 的开发安装代码编辑器

您将使用到期日期所需的所有代码创建一个插件,并在您的网站上激活它。那么让我们开始吧!

设置插件

首先您需要创建插件。在 wp-content 目录的插件文件夹中,创建一个名为 tutsplus-post-expiry-date-php 的空文件。

在代码编辑器中打开文件并向其中添加以下内容:

<?php/*Plugin Name: Add an Expiry Date to PostsPlugin URI: https://.tutsplus.com/tutorials/add-an-expiry-date-to-wordpress-posts--cms-22665Description: Adds an expiry date to posts, using a the jQuery UI datepickerAuthor: Rachel McCollinVersion: 1.0 */

您需要编辑该文件以使用您自己的名称和插件 URL,但这就是您需要告诉 WordPress 这是一个插件及其用途的信息。

现在转到 WordPress 管理员中的插件屏幕并激活插件。

创建元框

首先,我们将为到期日期创建元框。

使用 add_meta_box() 显示元框

第一步是创建将元框添加到帖子编辑屏幕的函数。将其添加到您的插件文件中:

function tutsplus_add_expiry_date_metabox() {    add_meta_box(         'tutsplus_expiry_date_metabox',         __( 'Expiry Date', 'tutsplus'),         'tutsplus_expiry_date_metabox_callback',         'post',         'side',         'high'     );}add_action( 'add_meta_boxes', 'tutsplus_add_expiry_date_metabox' );

这使用 add_meta_box() 函数,该函数有六个参数:

'tutsplus_expiry_date_metabox':此元框的唯一ID__( 'Expiry Date', 'tutsplus'):这显示为元框的标题

'tutsplus_expiry_date_metabox_callback':将填充元框的回调函数(我们接下来将创建它)

'post':此元框将出现在其编辑屏幕上的帖子类型

'side':元框将出现在屏幕的哪一部分

'high':元框将出现在哪个位置

然后将该函数附加到 add_meta_boxes 挂钩,使其在正确的时间触发。

创建回调函数

如果您现在保存插件并加载编辑屏幕,您会看到错误,因为回调函数尚未定义。所以我们接下来就这样做。

将其添加到您的插件文件中:

function tutsplus_expiry_date_metabox_callback( $post ) { ?>    ID, 'expires', true );?><input type="text" class="MyDate" name="tutsplus_expiry_date" value= / ><?php }

让我们看看它的作用:

它定义了 tutsplus_expiry_date_metabox_callback() 回调函数,以 $post 作为其对象。它打开一个表单元素。它会创建一个名为 $tutsplus_expiry_date 的变量,并将 'expires' 元键的值作为其值。它为元框中的字段创建一个标签。它使用日期选择器工作所需的 MyDate 类创建一个输入元素,名称为 tutsplus_expiry_date ,我们稍后在保存字段数据时将使用它,以及值 $tutsplus_expiry_date。它关闭表单。

现在我们有了表单,但它实际上不会执行任何操作,除非我们创建另一个函数来保存用户添加到其中的数据。

保存后保存数据

要将任何数据输入保存到表单中,我们需要创建一个函数,然后将其附加到 save_post 挂钩。

在您的插件文件中,添加以下内容:

function tutsplus_save_expiry_date_meta( $post_id ) {    // Check if the current user has permission to edit the post. */if ( !current_user_can( 'edit_post', $post->ID ) )    return;if ( isset( $_POST['tutsplus_expiry_date'] ) ) {$new_expiry_date = ( $_POST['tutsplus_expiry_date'] );update_post_meta( $post_id, 'expires', $new_expiry_date );}}add_action( 'save_post', 'tutsplus_save_expiry_date_meta' );

这会执行以下操作:

它检查当前用户是否具有当前帖子的 edit_post 能力。如果是,它会使用 isset 检查数据是否已添加到元框字段。如果是这种情况,它会创建一个名为 $new_expiry_date 的变量,并将其定义为输入的值。最后,它会使用该值更新帖子的元数据。

所以我们现在有一个元框,它可以让用户添加文本并将其保存到帖子元数据中。让我们让它更安全。

添加随机数以确保安全

为了确保帖子元数据仅通过此表单进行编辑,我们将添加一个随机数。

在回调函数中,在函数的其余内容之前,添加以下代码:

wp_nonce_field( 'tutsplus_expiry_date_metabox_nonce', 'tutsplus_nonce' );

接下来,在用于保存数据的 tutsplus_save_expiry_date_meta() 函数中,在函数开头添加以下内容:

if( !isset( $_POST['tutsplus_nonce'] ) ||    !wp_verify_nonce( $_POST['tutsplus_nonce'],'tutsplus_expiry_date_metabox_nonce') ) return;

现在保存您的插件并查看您的帖子编辑屏幕。您将看到您的元框:

给WordPress帖子添加过期日期

这是一个好的开始,但问题是目前这是一个普通的文本字段,所以没有办法确保您的用户仅以正确的格式输入日期。我们将通过添加 jQuery UI 日期选择器来纠正这个问题。

添加 JQuery UI 日期选择器

好消息是 jQuery UI 日期选择器预装了 WordPress,因此您无需注册或安装它:只需将其放入函数中即可。

在插件文件的顶部添加以下内容:

function tutsplus_load_jquery_datepicker() {    wp_enqueue_script( 'jquery-ui-datepicker' );wp_enqueue_style( 'jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' );}add_action( 'admin_enqueue_scripts', 'tutsplus_load_jquery_datepicker' );

这会将脚本本身和存储在 Google API 上的脚本样式表排入队列。请注意,您必须将其挂钩到 admin_enqueue_scripts 操作挂钩,而不是像在前端使用脚本时那样挂钩到 wp_enqueue_scripts

接下来,您需要将脚本添加到输出表单的回调函数中。在 input 元素之后和结束 标记之前,添加以下内容:

    jQuery(document).ready(function() {jQuery('.MyDate').datepicker({dateFormat : 'dd-mm-yy'});});

这引用了您已添加到输入元素的 MyDate 类,并向其中添加了日期选择器脚本。

您的回调函数现在将如下所示:

function tutsplus_expiry_date_metabox_callback( $post ) { ?>    ID, 'expires', true );?><input type="text" class="MyDate" name="tutsplus_expiry_date" value= / >jQuery(document).ready(function() {jQuery('.MyDate').datepicker({dateFormat : 'dd-mm-yy'});});<?php }

现在让我们看看保存插件文件后元框的样子:

给WordPress帖子添加过期日期

那好多了!但是,尽管您现在可以为帖子添加到期日期,但这对于它们是否显示在您的网站上没有任何影响。现在让我们改变这一点。

修改查询以排除过期帖子

最后一步是使用 pre_get_posts 挂钩修改主查询。

仍在您的插件文件中工作,添加以下代码:

function tutsplus_filter_expired_posts( $query ) {        // doesn't affect admin screens    if ( is_admin() )        return;    // check for main queryif ( $query->is_main_query() ) {    //filter out expired posts        $today = date('d-m-Y');        $metaquery = array(            array(                 'key' => 'expires',                 'value' => $today,                 'compare' => ' 'DATE',)        );        $query->set( 'meta_query', $metaquery );}}add_action( 'pre_get_posts', 'tutsplus_filter_expired_posts' );

这做了六件事:

首先,它定义 tutsplus_filter_expired_posts() 函数,并以 $query 作为其对象。它会检查我们是否位于管理屏幕中,因为我们不想排除其中过期的帖子。接下来,它检查主查询是否正在运行。如果是这样,它将变量 $today 定义为今天的日期,并使用与日期选择器相同的日期格式。然后,它使用 compare 运算符定义 $metaquery 来排除过期日期早于今天的帖子。最后,它使用 $metaquery 变量重置查询。

该函数与 pre_get_posts 挂钩,这将使其在查询获取帖子时运行。

现在保存您的插件文件并尝试一下。创建一个发布日期为几天前的帖子,然后为其指定昨天的到期日期。保存并切换到您的博客主页。您会发现您刚刚创建的帖子不在那里!

摘要

能够让您的帖子在给定日期自动过期非常有用。如果帖子的内容不再相关,或者您不希望人们在给定日期之后看到它,则添加到期日期可以让您不必记住在不再需要该帖子时编辑或删除该帖子。

通过使用 jQuery 日期选择器,您创建了一个用户友好的元框,您可以使用它来节省时间并避免访问者的困惑。

以上就是给WordPress帖子添加过期日期的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1551868.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 22:07:27
下一篇 2025年12月21日 22:07:50

相关推荐

  • WordPress中创建一个简单的CRM:创建自定义字段

    在本系列中,我们一直在研究如何在 wordpress 中创建简单的 crm 系统。在本系列的第一部分中,我们创建了一个注册“联系人”自定义帖子类型的 wordpress 插件,但我们尚未介绍如何存储联系人的其他信息。 创建自定义字段 WordPress 具有 add_meta_box() 函数,该函…

    2025年12月21日 好文分享
    000
  • 利用WordPress媒体上传工具添加和删除图片

    在本系列的上一篇文章中,我们开始使用 wordpress 媒体上传器的最新版本,以便更清楚地了解如何开始将其合并到我们的项目中。 使用这个新功能(嗯,是 3.5 以后的新功能)的困难之处在于它没有像其他功能那样有详细的文档记录。这显然让很多开发人员——尤其是初学者——对如何开始使用它感到摸不着头脑。…

    2025年12月21日
    000
  • WooCommerce页面特定元素隐藏指南:PHP与CSS条件判断

    本教程详细介绍了在WordPress WooCommerce网站中,如何根据页面类型(如产品页或结账页)条件性地隐藏Elementor创建的区块或页脚。文章提供了两种主要方法:利用WordPress和WooCommerce的PHP条件函数进行服务器端控制,以及通过CSS结合body类进行客户端样式隐…

    2025年12月21日
    000
  • WooCommerce特定页面元素条件隐藏指南

    本教程详细介绍了在woocommerce商品页和结算页有条件地隐藏特定区域(如elementor创建的页脚)的三种专业方法。我们将探讨通过修改主题模板使用`get_footer()`、利用php条件逻辑(`is_product()`、`is_checkout()`)包裹代码,以及通过css结合wor…

    2025年12月21日
    000
  • WordPress菜单链接目标:自定义为特定iframe的实现指南

    本教程详细介绍了如何在WordPress中将导航菜单项的链接目标从默认的`_blank`更改为指定的iframe名称。通过利用`nav_menu_link_attributes`过滤器,并结合`functions.php`中的PHP代码,您可以确保菜单链接在页面上存在的具名iframe中打开,从而实…

    2025年12月21日
    000
  • 在WordPress菜单中实现链接定向到指定iframe的教程

    本教程详细介绍了如何在wordpress中,通过自定义代码将菜单项链接的目标(target)属性设置为指定的iframe名称,而非默认的`_blank`。文章将指导您修改`functions.php`文件以应用`nav_menu_link_attributes`过滤器,并强调确保目标iframe在页…

    2025年12月21日
    000
  • WordPress菜单项链接目标自定义:在指定iframe中打开

    本教程详细指导如何在wordpress中自定义菜单项的链接目标属性,使其不再局限于`_blank`,而是能够将链接内容加载到页面上指定名称的`iframe`中。通过使用`nav_menu_link_attributes`过滤器,配合正确的`iframe` html结构,开发者可以实现更灵活的页面内容…

    2025年12月21日
    000
  • WordPress菜单项链接在指定iframe中打开的教程

    本教程详细介绍了如何在WordPress中,通过修改菜单项的链接目标(target)属性,使其内容在指定名称的iframe中打开。我们将利用`nav_menu_link_attributes`过滤器,结合自定义PHP代码和页面上的iframe元素,解决WordPress默认只支持`_blank`目标…

    2025年12月21日
    000
  • WordPress菜单链接自定义Iframe目标属性设置教程

    本教程详细指导如何在WordPress中通过编程方式,将导航菜单链接的目标属性(target)设置为指定的iframe名称。我们将利用`nav_menu_link_attributes`过滤器修改链接属性,并强调确保目标iframe已正确嵌入页面HTML的关键步骤,以实现菜单链接在特定iframe中…

    2025年12月21日
    000
  • 在WordPress中实现PWA服务工作者按条件注册的教程

    本教程旨在解决wordpress中按条件控制渐进式web应用(pwa)服务工作者注册的问题,特别是当需要根据用户登录状态等条件来决定是否启用pwa功能时。文章将详细介绍如何利用wordpress的`wp_dequeue_script()`函数和`wp_print_scripts`动作钩子,在不修改p…

    2025年12月21日
    000
  • WordPress中条件性阻止PWA Service Worker注册的教程

    本教程将指导您如何在wordpress环境中,通过php代码和`wp_dequeue_script()`函数,根据用户登录状态或其他自定义条件,服务器端阻止pwa service worker的注册脚本加载。这种方法避免了直接修改插件文件,确保未登录用户无法访问或下载pwa,从而实现对pwa分发的精…

    2025年12月21日
    000
  • WordPress中基于用户登录状态控制PWA Service Worker注册

    本文详细阐述了如何在WordPress环境中,通过PHP代码动态控制PWA Service Worker的注册,以实现基于用户登录状态的条件性PWA部署。核心方法是利用WordPress的wp_dequeue_script()函数,在特定条件下阻止PWA注册脚本加载,从而确保只有已登录用户才能下载和…

    2025年12月21日
    000
  • 在WooCommerce感谢页嵌入订单详情并传递给JavaScript

    本教程旨在详细指导如何在woocommerce的“感谢页”中安全有效地获取订单详情,并将其动态嵌入到javascript代码中,以便将数据发送至第三方营销或分析系统。文章将重点介绍使用wordpress动作钩子`wp_footer`的正确方法,并提供处理单个或多个订单商品的代码示例,确保数据准确无误…

    2025年12月21日
    000
  • WordPress中JavaScript在动态内容加载后不执行的解决方案

    本文旨在解决wordpress网站中javascript代码不执行的问题,特别是当页面包含动态加载内容(如使用页面构建器或表单插件)时。核心问题在于javascript的加载时机与dom元素的存在时间不匹配。文章将详细解释`jquery(document).ready()`与`jquery(wind…

    2025年12月21日
    000
  • 在WooCommerce感谢页嵌入JavaScript并获取订单详情的专业指南

    本教程旨在指导用户如何在woocommerce感谢页面中,利用wordpress的动作钩子(如`wp_footer`),安全有效地获取订单详情,并将其动态注入到javascript跟踪脚本中。通过php代码获取订单id、总金额、商品id和名称等信息,并将其格式化后传递给外部营销或分析系统,确保数据传…

    2025年12月21日
    000
  • WordPress自定义表单JavaScript验证失效问题排查与解决

    本文旨在解决wordpress网站中使用oxygen builder和forminator构建自定义表单时,javascript验证脚本无法正常执行的问题。通过分析脚本加载时机和页面元素生成方式,提供两种解决方案:使用`jquery(window).load()`确保脚本在页面完全加载后执行,以及将…

    2025年12月21日
    000
  • 动态样式:使用jQuery管理元素选中状态与样式切换

    本文详细探讨了如何利用jquery和css动态管理网页元素的选中状态及其样式。通过介绍css的`:focus`伪类和jquery的类切换机制,文章提供了两种实现方案,旨在帮助开发者在交互式界面中,如轮播图或导航菜单,高效地为选定元素应用独特样式,同时保持代码的清晰与可维护性。 在网页开发中,经常需要…

    2025年12月21日
    000
  • 利用jQuery和CSS动态管理元素选中状态的教程

    本教程详细介绍了如何使用jQuery和CSS来动态改变一组具有相同类名的元素的样式,以实现选中状态的视觉反馈。文章提供了两种实现方案:一是利用CSS的`:focus`伪类,二是推荐使用jQuery结合CSS类进行切换,通过移除旧的选中类并添加新的选中类,从而高效管理元素的选中与非选中状态,确保用户界…

    2025年12月21日
    000
  • Gravity Forms:解决隐藏必填字段导致的提交问题

    本文旨在解决在使用 Gravity Forms 时,通过 JavaScript 隐藏必填字段可能导致的表单提交问题。核心在于理解 JavaScript 隐藏字段并不改变其必填属性,因此需要通过 PHP 代码进行自定义验证,以确保表单在特定条件下能够成功提交。本文将提供两种基于 PHP 的解决方案:一…

    2025年12月20日
    000
  • Nuxt3 Apollo 多认证头管理:实现会话与JWT共存的策略

    本文深入探讨了在Nuxt3应用中,如何利用Nuxt Apollo客户端同时处理多种认证头(如WooCommerce会话ID和JWT),以解决默认配置下只能指定一个认证头的问题。通过定制Apollo客户端的链路(setContext和ApolloLink)并手动将其注入Nuxt应用,开发者可以获得对请…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信