标签: WordPress插件开发

  • JVPS-AFF affman必备插件

    JVPS-AFF affman必备插件

    我们前面写了python版本的VPS库存监控系统,现在我们弄一个WordPress版的vps推介的aff插件。

    jvps-aff 插件购买直达链接: https://uziwp.com/product/jvps-aff

    主要功能如下:

    2022.11.12更新

    • 简码中增加table的class属性
    • 修正WP_CLI的bug

    2022.11.06 更新

    • 支持兼容WP_CLI获取vps是否有货
    • 兼容page页面,浏览器直接获取vps厂家库存情况
    • 在后台列表中显示出ID字段,方便简码调用。
    • 在文章中支持简码插入指定ID

    [jvps ids=”46961,46962,46943″]

    简码说明

    可用参数

    • class (非必填)适用于table表格
    • ids (必填)定义为指定的记录id,多个值时用 ,(英文状态的逗号隔开)
    • fields (非必填),参数:id,厂家,CPU,内存,硬盘,流量,价格,购买链接,带宽,路由

    示例

  • WordPress导航类主题 uziwp_nav

    WordPress导航类主题 uziwp_nav

    演示地址:https://gkxyz.com

    2022.09.02

    • 主题初始化,主题需要依赖安装`Advanced Custom Fields 专业版`
    • 后台可以自定义设置首页出现的类别
    • 单页中可以关联推荐的站点、文章内容
    • 基于Bootstrap,兼容电脑pc端、手机wap端
    • 保密模式,所有内页内容可以设置需要输入密码才能访问。
  • WordPress企业类主题 uziwp_twentytwentytwo

    WordPress企业类主题 uziwp_twentytwentytwo

    站点演示:https://uziwp.com

    本主题售价:¥899. !!!非诚勿扰!!!,购买地址:uziwp_twentytwentytwo 企业类主题 – 柚子科技 WordPress 主题、WordPress插件

    20221011

    • 新增右侧工具栏产品类内容(可以自定义设置显示分类ID)

    20220806

    • 增加幻灯片banner的文字填入功能,可以设置标题、副标题、正文等。
    • 细化文章列表中显示标签、分类功能.
    • 新增“栏目新闻”等模块。
    • 新增后台全局自定义文字颜色、链接颜色等。
    • 修改页脚栏目,移动到小工具的功能。
    • 兼容多端设备PC电脑端,手机,平板.
    • 新增访问密码设置,内容区域需要输入密码才能访问。
    • 新增模块自选功能,首页内容,可以自定义模块。
  • WordPress:获取当前页面菜单的current menu item,输出在菜单中的子菜单get sub menu

    WordPress:获取当前页面菜单的current menu item,输出在菜单中的子菜单get sub menu

    遇到一个问题,要显示当前页面的面包屑导航,只是这个面包屑路径反应的不是页面自身的层级关系,而是该页面在菜单导航中的位置。因此需要检测该页面所在菜单的current menu item,在stackexchange上找到了一个不错的方法,记录一下。

    使用wp_nav_menu_objects filter查找current menu item,在调用wp_nav_menu之前先过滤一下这个filter的值,找到current menu item,将需要的信息,例如menu ID,标题或url等,记录到一个全局变量里。等调用完wp_nav_menu后,就可以使用这个全局变量显示信息了。

    在当前菜单中做一下记号

    add_filter( 'wp_nav_menu_objects', 'uzi_wp_nav_menu_objects' );
    function uzi_wp_nav_menu_objects( $sorted_menu_items )
    {
        foreach ( $sorted_menu_items as $menu_item ) {
            if ( $menu_item->current ) {
                $_SESSION['uzi_current_menu'] = $menu_item;
                break;
            }
        }
        return $sorted_menu_items;
    }

    全局变量$_SESSION['uzi_current_menu']记录了当前菜单的current menu item的标题。

    一些比较有用的信息如下

    $menu_item->ID - Menu ID
    $menu_item->title - 该菜单项名称
    $menu_item->post_title - Post Title,不一定和菜单项名称相同
    $menu_item->url -  固定链接
    $menu_item->object_id - post ID
    $menu_item->post_parent - Post Parent(例如page的parent page)
    $menu_item->menu_item_parent - 指在该菜单中的层级关系

    输出main-nav菜单中,当前页面所在菜单的子菜单

    $locations = get_nav_menu_locations();
    $menu = wp_get_nav_menu_object($locations['main-nav']); // primary' is our nav menu's name
    $menu_items = wp_get_nav_menu_items($menu->term_id);
    // var_dump($menu,$_SESSION['uzi_current_menu']->ID,$menu_items);
    if (!empty($menu_items)) {
        echo '<ul>';
        foreach ($menu_items as $menu_item) {
            if($menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->ID
               || $menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->			if ($menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->ID
    				|| ($menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->menu_item_parent && 0 != $menu_item->menu_item_parent)
    			) {
    				//判断当前页面是该菜单项的子项
    				if (is_page($menu_item->object_id) || is_category($menu_item->object_id)) {
    					echo '<li class="current-menu-item">';
    				} else {
    					echo '<li>';
    				}
    				echo '<a href="' . $menu_item->url . '">' . $menu_item->title . '</a>';
    				echo '</li>';
    			}        
        }
        echo '</ul>';
    }
  • WordPress WooCommerce检测某个产品ID Product ID 是否在订单中 代码实例

    WordPress WooCommerce检测某个产品ID Product ID 是否在订单中 代码实例

    在WordPress的主题WooCommerce商城开发插件中,我们需要检测一个产品id是否在某个订单中,下面我们记录一下代码实例

    function check_order_product_id($order_id,$the_product_id)
    {
        $order = wc_get_order((int)$order_id);
        $items = $order->get_items();
        foreach ($items as $item_id => $item) {
            $product_id = $item->get_variation_id() ? $item->get_variation_id() : $item->get_product_id();
            if ($product_id === (int)$the_product_id) {
                return true;
            }
        }
        return false;
    }
    
  • WordPress更改`在此输入标题`占位符提示文字 #title-prompt-text

    WordPress更改`在此输入标题`占位符提示文字 #title-prompt-text

    WordPress默认在撰写新文章时,在标题输入文本框内有一个“在此输入标题”占位符提示文字。

    <label class="" id="title-prompt-text" for="title">添加标题</label>

    2022腾讯云新春特惠购买直达链接:https://www.jiloc.com/go/qcloud-act

    当我们创建自定义的文章类型,想改变这个提示,但却没有默认参数来改变这个文字,可以通过下面的代码改变这个提示文字。

    function change_title_text($title)
    {
        $screen = get_current_screen();
        if ('movie' == $screen->post_type) {
            $title = __('输入影片名.Enter the movie name', 'jvsn');
        }
        return $title;
    }
    add_filter('enter_title_here', 'change_title_text');
    

    通过创建函数 change_title_text,检查是否存在一个特定的自定义类型,然后通过过滤器enter_title_here,更改默认的标题提示文字,修改其中的 movie 为自定义分类法名称。

  • WordPress主题插件开发save_post hook 钩子 修改文章发表状态 图文教程

    WordPress主题插件开发save_post hook 钩子 修改文章发表状态 图文教程

    老季最近在开发一个插件,需要在保存文章的hook钩子中修改文章的状态,这里记录一下具体的方法。

    这里要先移除保存文章的钩子然后再更新文章状态(不然会造成服务器500错误),然后再把钩子重新启用。官方说明文档如下:

    Avoiding infinite loops

    If you are calling a function such as wp_update_post that includes the save_post hook, your hooked function will create an infinite loop. To avoid this, unhook your function before calling the function you need, then re-hook it afterward.

    // this function makes all posts in the default category private
     
    function set_private_categories($post_id) {
        // If this is a revision, get real post ID
        if ( $parent_id = wp_is_post_revision( $post_id ) ) 
            $post_id = $parent_id;
     
        // Get default category ID from options
        $defaultcat = get_option( 'default_category' );
     
        // Check if this post is in default category
        if ( in_category( $defaultcat, $post_id ) ) {
            // unhook this function so it doesn't loop infinitely
            remove_action( 'save_post', 'set_private_categories' );
     
            // update the post, which calls save_post again
            wp_update_post( array( 'ID' => $post_id, 'post_status' => 'draft' ) );
     
            // re-hook this function
            add_action( 'save_post', 'set_private_categories' );
        }
    }
    add_action( 'save_post', 'set_private_categories' );

    WordPress官方手册:https://developer.wordpress.org/reference/hooks/save_post/

  • WordPress 自定义文章类型 固定链接 使用.html 后缀 图文教程

    WordPress 自定义文章类型 固定链接 使用.html 后缀 图文教程

    当我们创建了自定义类型文章之后,默认的`固定链接`即使设置成 /%postname%.html ,自定义文章的后缀也不带.html ,所以我们记录一下通过代码的方式来实现。

    比如我们这里使用案例的类型

    /jiloc-case/postname //默认url路径

    /jiloc-case/postname.html //修改之后的url路径

    /**
     * 设置多种自定义文章类型的固定链接结构为 post_name.html
     */
    $mytypes = array(//根据需要添加你的自定义文章类型
            'case' => 'jiloc-case',
    	'product' => 'jiloc-product',
    );
    add_filter('post_type_link', 'my_custom_post_type_link', 1, 3);
    function my_custom_post_type_link( $link, $post = 0 ){
        global $mytypes;
        if ( in_array( $post->post_type,array_keys($mytypes) ) ){
            return home_url( $mytypes[$post->post_type].'/' . $post->post_name .'.html' );
        } else {
            return $link; 
        }
    }
    add_action( 'init', 'my_custom_post_type_rewrites_init' );
    function my_custom_post_type_rewrites_init(){
        global $mytypes;
        foreach( $mytypes as $k => $v ) {
    		add_rewrite_rule($v.'/([^/]+)\.html$','index.php?post_type='.$k.'&name=$matches[1]','top');		
        }
    } 
  • WordPress 后台仪表盘 文章 页面 列表 显示对应的ID

    WordPress 后台仪表盘 文章 页面 列表 显示对应的ID

    在WordPress 中,每一篇文章及每一个页面都有一个独一无二的id 。在开发主题或者插件的时候可能有需要获取相对应的文章或者页面id,例如在展示特色文章幻灯片,你需要获取对应文章的id。现在教你一个方法快速在后台文章和页面列表显示对应的ID。

    将下面的代码添加到主题的functions.php 文件下:

    add_filter('manage_posts_columns', 'posts_columns_id', 5);
    add_action('manage_posts_custom_column', 'posts_custom_id_columns', 5, 2);
    add_filter('manage_pages_columns', 'posts_columns_id', 5);
    add_action('manage_pages_custom_column', 'posts_custom_id_columns', 5, 2);
    function posts_columns_id($defaults){
        $defaults['wps_post_id'] = __('ID');
        return $defaults;
    }
    function posts_custom_id_columns($column_name, $id){
            if('wps_post_id' === $column_name){
                    echo $id;
        }
    }

    保存后,在后台-文章-文章列表 那里你会看到显示的id。

  • WordPress Dashboard后台 非插件 纯代码 实现自定义字段过滤

    前面我们介绍了 WordPress 主题/插件开发 自定义文章分类 筛选功能 图文教程

    下面我们记录一下如何在后台实现过滤自定义字段,将以下代码放入 functions.php 文件中代码段如下:

    add_filter( 'parse_query', 'jadmin_posts_filter' );
    add_action( 'restrict_manage_posts', 'jadmin_posts_filter_restrict_manage_posts' );
     
    function jadmin_posts_filter( $query )
    {
        global $pagenow;
        if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && '' != $_GET['ADMIN_FILTER_FIELD_NAME']) {
            $query->query_vars['meta_key'] = sanitize_text_field($_GET['ADMIN_FILTER_FIELD_NAME']);
        if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && '' != $_GET['ADMIN_FILTER_FIELD_VALUE'])
            $query->query_vars['meta_value'] = sanitize_text_field($_GET['ADMIN_FILTER_FIELD_VALUE']);
        }
    }
     
    function jadmin_posts_filter_restrict_manage_posts()
    {
        global $wpdb;
        $sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1';
        $fields = $wpdb->get_results($sql, ARRAY_N);
    ?>
    <select name="ADMIN_FILTER_FIELD_NAME">
    <option value=""><?php _e('Filter By Custom Fields', 'jiloc'); ?></option>
    <?php
        $current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:'';
        $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
        foreach ($fields as $field) {
            if (substr($field[0],0,1) != "_"){
            printf
                (
                    '<option value="%s"%s>%s</option>',
                    $field[0],
                    $field[0] == $current? ' selected="selected"':'',
                    $field[0]
                );
            }
        }
    ?>
    </select> <?php _e('Value:', 'jiloc'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" />
    <?php
    }
  • php代码实现 WordPress禁止使用前端主题访问 维护模式

    php代码实现 WordPress禁止使用前端主题访问 维护模式

    最近在给客户弄一个基于WordPress的OA系统,前台禁止访问。仅供后台使用。这边我们记录一下,如何禁止使用前端主题。开启维护模式。

    为什么要启用维护模式?

    • 可以避免访客在打开博客时,因为折腾出现一些不怎么美好的情况。
    • 它可以帮助您正常地在网站的后端调整网站设置,主题或插件,而不会让访问者看到您的网站在维护时的全部细节。

    开启维护模式也很简单,我们需要打开WordPress当前模板目录中的functions.php

    添加如下代码:

    function maintenance_mode() {       
        if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {
            wp_die('站点维护中,请稍后再来.');
        } 
    }
    add_action('get_header', 'maintenance_mode');

    保存上传就开启了维护模式。

  • WordPress 自定义类型文章 从url地址中删除 taxonomy 分类How to remove custom taxonomy-base from URL in WordPress

    WordPress 自定义类型文章 从url地址中删除 taxonomy 分类How to remove custom taxonomy-base from URL in WordPress

    最近有小伙伴找到老季,想要把自定义ulr路径中把taxonomy自定义类型的分类删除。例如:

    https://www.jiloc.com/projects_cat/fine-led-display/

    变成

    https://www.jiloc.com/projects_cat/fine-led-display/

    下面我们给出代码解决办法:

    register_taxonomy(
           'travel-category', //taxonomy base
           'destination', // custom post type
           'rewrite' => array( 'slug' => '/', 'with_front' => FALSE )
    );

    如果出现404,在 设置 – 固定链接 中重新保存即可。

WeChat
↑