理想技术网 - 信息 https://im1.cc/tag/%E4%BF%A1%E6%81%AF/ zh-CN Sun, 19 Jan 2025 17:15:00 +0800 Sun, 19 Jan 2025 17:15:00 +0800 唯爱API - 致力于为开发者提供免费、稳定、快速的Web Api服务 https://im1.cc/Note/278.html https://im1.cc/Note/278.html Sun, 19 Jan 2025 17:15:00 +0800 admin

声明:提供的所有API接口仅供学习和娱乐使用。我们尊重并保护所有版权和知识产权,如有任何侵权行为,请通过以下方式与我们联系(博主QQ:345179552)。

唯爱公益API(api.im1.cc)是一款由博主独立开发的API管理系统,我始终坚持公益初心,致力于为广大开发者提供一个方便、安全、易于使用的API平台,我们相信,在唯爱API的帮助下,开发者们一定能够在API技术的道路上走得更远!助大家在学习和探索API技术的道路上更进一步。

唯爱API提供了丰富的API接口,抖音解析(仅提供学习使用),IP个性签名 、天气信息查询、随机图片、获取QQ头像等API。博主为每个API都提供了详细的文档说明,包括接口地址、请求参数、返回结果等信息。开发者可以根据自己的需求选择合适的API进行学习和使用。

前端:使用Vue 3框架,结合TypeScript、axios和Element Plus组件库,打造高效、灵活的前端应用。

后端:基于Node.js和Express框架构建后端服务,确保系统的稳定性和扩展性。

界面展示图:

唯爱API.png

跳转地址:
唯爱公益API

]]>
0 https://im1.cc/Note/278.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
JAVA 怎么安卓接入穿山甲广告? https://im1.cc/Front/263.html https://im1.cc/Front/263.html Sun, 15 Sep 2024 12:34:00 +0800 admin

为什么突然写JAVA教程了?

 title=

如图所示,星宿小程序作者突然来信!

在安卓项目中接入穿山甲广告平台(Pangle Ads,之前叫穿山甲广告),你可以通过官方SDK来实现。以下是接入穿山甲广告的一般步骤,基于Java语言。

步骤1:注册并获取App ID和广告位ID

  1. 访问Pangle Ads官网,注册开发者账号。
  2. 创建应用并获取App ID。
  3. 创建广告位并获取广告位ID(如激励视频广告、插屏广告、Banner广告等)。

步骤2:集成穿山甲SDK

1. 在项目中添加依赖
修改项目的build.gradle文件。
在项目级的build.gradle中,添加Pangle SDK的maven仓库:

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'https://artifact.bytedance.com/repository/pangle'
        }
    }
}

在应用级的build.gradle中,添加Pangle SDK依赖项(以穿山甲广告的激励视频为例):

dependencies {
    implementation 'com.bytedance.sdk:pangle:4.0.0.6'  // SDK的版本号可能会更新,请参考官网
}

2. 配置权限
在AndroidManifest.xml中添加必要的权限和配置:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<application
    ...>
    <!-- Pangle SDK初始化 -->
    <meta-data
        android:name="com.bytedance.sdk.openadsdk.APP_ID"
        android:value="你的App ID"/> <!-- 替换成你的App ID -->

    <!-- 网络安全配置 -->
    <meta-data
        android:name="com.bytedance.sdk.openadsdk.network_security_config"
        android:value="@xml/network_security_config"/>
</application>

步骤3:初始化穿山甲SDK
在你的Application类中初始化穿山甲SDK:

import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdSdk;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        TTAdSdk.init(this, new TTAdConfig.Builder()
                .appId("你的App ID") // 替换成你的App ID
                .useTextureView(true)
                .appName("你的应用名称")
                .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_LIGHT)
                .allowShowNotify(true)
                .debug(true)  // Debug模式下会输出日志
                .build());
    }
}

步骤4:加载和展示广告

  1. 激励视频广告示例
    在合适的地方加载并展示激励视频广告:
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;
import com.bytedance.sdk.openadsdk.AdSlot;

public class MainActivity extends AppCompatActivity {
    private TTAdNative mTTAdNative;
    private TTRewardVideoAd mTTRewardVideoAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 创建TTAdNative对象,用于加载广告
        mTTAdNative = TTAdSdk.getAdManager().createAdNative(this);

        // 加载激励视频广告
        loadRewardVideoAd("你的广告位ID");  // 替换成你的广告位ID
    }

    private void loadRewardVideoAd(String adId) {
        // 创建广告参数
        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(adId)
                .setSupportDeepLink(true)
                .setExpressViewAcceptedSize(500, 500)  // 单位是dp
                .setUserID("user123") // 用户ID, 用于广告效果归因
                .setMediaExtra("media_extra") // 附加参数,可以传递给服务器
                .build();

        // 加载广告
        mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
            @Override
            public void onError(int code, String message) {
                Log.e("广告加载失败", "code: " + code + ", message: " + message);
            }

            @Override
            public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
                Log.d("广告加载成功", "激励视频广告已加载");
                mTTRewardVideoAd = ad;
            }

            @Override
            public void onRewardVideoCached() {
                Log.d("广告缓存成功", "激励视频广告缓存完成");
            }
        });
    }

    private void showRewardVideoAd() {
        if (mTTRewardVideoAd != null) {
            mTTRewardVideoAd.showRewardVideoAd(this);
        }
    }
}

步骤5:测试和上线

  1. 调试广告:可以先使用穿山甲提供的测试广告位,确保广告的展示和回调正常。
  2. 上线广告:确认广告功能正常后,替换为正式的广告位ID并上线应用。

其他广告类型

穿山甲SDK支持多种广告形式,如Banner广告、插屏广告、信息流广告等,加载和展示的流程与激励视频广告类似,只需根据需求配置不同的AdSlot参数。

详细的API文档和具体广告类型的示例,可以参考穿山甲官方文档

通过上述步骤,你应该可以成功接入穿山甲广告平台,并展示相应的广告。

]]>
1 https://im1.cc/Front/263.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
(原创)Typecho全功能安全防护插件 https://im1.cc/Typecho/257.html https://im1.cc/Typecho/257.html Sat, 13 Jul 2024 13:40:56 +0800 admin

插件简介:

为什么会有想法来写这么一款插件,主要还是因为没有宝塔企业版,导致没有安装防火墙,本插件可以防御SQL注入、XSS攻击、CC攻击。

插件功能:

启用插件后可以防御 SQL 注入、XSS攻击、CC攻击。
插件后台可设置CC每分钟请求数限制,封禁时间(秒)。
插件后台自带CC模拟攻击测试。
记录信息在插件文件下的Lxanquan_log.txt文本内进行查看。

插件界面:

 title=

]]>
1 https://im1.cc/Typecho/257.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
(原创)Typecho图片登录或评论后可见插件 https://im1.cc/Typecho/256.html https://im1.cc/Typecho/256.html Sat, 13 Jul 2024 13:10:00 +0800 admin

插件简介:

此插件主要是文章图片内容进行隐藏,分两种方式,第一种需登录后可见文章原图,第二种为评论后可见文章原图,没有登录和没有评论是无法正常查看到原图。

插件功能:

  • 未登录提示信息自定义
  • 未评论提示信息自定义

插件界面:

 title=

前端效果展示:

未登录效果:

 title=

评论后可见效果:

 title=

]]>
1 https://im1.cc/Typecho/256.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
利用云开发给微信小程序添加文本内容审核 https://im1.cc/Front/253.html https://im1.cc/Front/253.html Sat, 29 Jun 2024 11:49:00 +0800 admin

在微信小程序中利用云开发实现文本内容审核可以通过以下步骤完成。文本内容审核主要是对用户提交的文本进行敏感信息检测和内容审核,确保内容的合法性和安全性。

步骤概述

  1. 开通云开发
  2. 配置文本内容审核服务
  3. 编写云函数实现审核逻辑
  4. 调用云函数进行文本审核

1. 开通云开发

首先,确保你的小程序已经开通了云开发功能。如果还没有,可以在微信开发者工具中创建一个新的小程序,并开通云开发。

2. 配置文本内容审核服务

微信小程序提供了内容安全能力,包括文本内容审核功能。你需要在微信小程序后台配置相应的服务。

2.1. 获取审核服务密钥

  • 登录微信公众平台,进入【设置】->【安全中心】->【内容安全】。
  • 获取内容安全服务的 AppID 和 AppSecret,这些信息将用于访问内容安全接口。

3. 编写云函数实现审核逻辑

在云开发中创建一个云函数,用于调用微信小程序的内容安全接口进行文本内容审核。

3.1 创建云函数

在微信开发者工具中创建一个新的云函数,例如命名为 textCheck。

3.2 云函数代码示例

// 云函数 textCheck
const cloud = require('wx-server-sdk');
const request = require('request-promise');

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

exports.main = async (event, context) => {
  const { content } = event;

  try {
    const accessToken = await getAccessToken();
    const result = await checkText(accessToken, content);
    return result;
  } catch (err) {
    return {
      errCode: -1,
      errMsg: '内容审核失败'
    };
  }
};

// 获取 access token
async function getAccessToken() {
  const res = await cloud.callFunction({
    name: 'getWXAccessToken'
  });
  return res.result.access_token;
}

// 调用内容安全接口进行文本审核
async function checkText(accessToken, content) {
  const apiUrl = `https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${accessToken}`;
  
  const options = {
    method: 'POST',
    uri: apiUrl,
    body: {
      content
    },
    json: true
  };

  const res = await request(options);

  return res;
}

3.3 创建获取 AccessToken 的云函数

创建一个额外的云函数来获取访问微信内容安全接口所需的 AccessToken,命名为 getWXAccessToken。

// 云函数 getWXAccessToken
const cloud = require('wx-server-sdk');
const axios = require('axios');

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

exports.main = async () => {
  try {
    const { APPID, APPSECRET } = cloud.getWXContext().ENV;
    const apiUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`;
    const res = await axios.get(apiUrl);
    return res.data;
  } catch (err) {
    return {
      errCode: -1,
      errMsg: '获取 AccessToken 失败'
    };
  }
};

4. 调用云函数进行文本审核

在小程序端调用云函数,传入待审核的文本内容,并处理返回的审核结果。

4.1 小程序端代码示例

// 在小程序页面中调用云函数进行文本审核
wx.cloud.callFunction({
  name: 'textCheck',
  data: {
    content: '待审核的文本内容'
  },
  success: res => {
    console.log('审核结果:', res.result);
    // 处理审核结果
  },
  fail: err => {
    console.error('文本审核失败', err);
  }
});

注意事项

  1. 确保微信小程序的云开发环境已经配置正确,并且已经开通内容安全能力。
  2. 需要在微信公众平台中配置内容安全服务的 AppID 和 AppSecret,并在云函数中正确获取和使用。
  3. 审核结果包括 errcode 和 errmsg,根据需求处理不同的审核结果。

通过以上步骤,你可以在微信小程序中利用云开发实现文本内容审核功能,保障用户和平台的安全。

]]>
0 https://im1.cc/Front/253.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
(原创)Typecho站内内容引用插件 https://im1.cc/Note/172.html https://im1.cc/Note/172.html Tue, 18 Jun 2024 09:58:00 +0800 admin

插件简介:

站内内容引用插件,可在文章里面引用文章,独立页面,评论,用户,进而展示相关信息,引用文章时会根据评论数量进行评分。

插件使用:

//引用指定文章/独立页面
{post-文章或页面的cid}
{post-文章或页面的slug}
//引用指定评论
{comment-评论的coid}
支持点击评论跳转到完整评论内容处
//引用指定用户
{user-用户的uid}

插件效果展示如下;

(创意)深蓝色个人简历引导页

文章热度: ★★☆☆☆ 27

今天有小伙伴与我交流发了一个PPT文件,我打开一看是个人简历的PPT文档。 他说想把此PPT文档样子做成网站形式进行展示,自己做个网站的引导页,我觉得他的想法挺有意思,就答应给他做了,不过...

2024-06-22 / Front


Jst
Jst

这个牛啊 意思删除文章同时删除了文章内的图片? [tv_呆]


admin
admin

账号用户组: administrator

主页地址: https://www.im1.cc

创建于: 2024年04月16日 最后登录: 2025年01月22日 13:53

如何获得此插件?

评论留言参与抽奖即可免费获得此插件完整源代码!

每个用户每天有3次抽奖机会,如果三次机会没有获奖,第二天再来抽奖!

为什么没有中奖名单?

不是没人中奖,7月份中奖的数据没有,是因为设计插件时忘记编写重新开启活动后把之前的中奖名单自动记录为历史而不是删除,说简单点就是忘记多添加一个数据库的字段。

大乐透插件更新:

新增历史中奖记录功能
1、在每次活动结束时,不删除中奖记录,而是将其标记为历史记录。
2、在展示历史中奖名单时,包含所有的历史记录。

发现问题怎么办?

大家发现问题可在评论区留言或者发送邮件到我的邮箱:im1cc@qq.com,我看到也会进行亲测再进行修复,再此感谢那些发现问题能告知我的小伙伴们了。

]]>
19 https://im1.cc/Note/172.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
使用Docker搭建的Nginx+WordPress,自定义主题使用失败! https://im1.cc/WordPress/171.html https://im1.cc/WordPress/171.html Sat, 15 Jun 2024 15:01:32 +0800 admin

在使用 Docker 搭建的 Nginx 和 WordPress 环境中,自定义主题使用失败的情况可能由多种原因引起。以下是一些可能的原因和相应的解决方法:

  1. 检查主题文件权限
    确保主题文件的权限正确,特别是在 Docker 容器中。主题目录及其文件应具有适当的读写权限。
  • 进入 Docker 容器:

    docker exec -it <wordpress_container_name> bash
  • 检查主题目录权限:

    cd /var/www/html/wp-content/themes
    ls -l
  • 设置适当的权限(例如 755):

    chmod -R 755 <your_theme_directory>
  1. 确保主题文件完整
    确保自定义主题文件完整,尤其是 style.css 和 functions.php 文件。style.css 应包含主题的基本信息,如下所示:

    /*
     Theme Name:   My Lixiang Theme
     Theme URI:    http://example.com/
     Description:  A Lixiang theme for WordPress
     Author:       Your Name
     Author URI:   http://example.com/
     Template:     Lixiang
     Version:      1.0.0
    */
  2. 检查 Nginx 配置

确保 Nginx 配置正确,特别是根目录设置和 PHP 文件处理配置。

  • 在 Nginx 配置文件中,检查根目录配置:

    server {
      listen 80;
      server_name yourdomain.com;
    
      root /var/www/html;
      index index.php index.html index.htm;
    
      location / {
          try_files $uri $uri/ /index.php?$args;
      }
    
      location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
      }
    
      location ~ /\.ht {
          deny all;
      }
    }
  • 重启 Nginx 容器:

    docker restart <nginx_container_name>
  1. 检查 Docker 卷挂载配置
    确保在 Docker Compose 文件中正确地挂载了卷,使主机上的主题目录映射到容器中的正确位置。

示例如下:

version: '3.1'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8000:80"
    volumes:
      - ./wp-content/themes:/var/www/html/wp-content/themes
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
    volumes:
      - db_data:/var/lib/mysql

  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./wp-content/themes:/var/www/html/wp-content/themes

volumes:
  db_data:
  1. 清理缓存
    有时,浏览器或插件的缓存会导致主题修改不生效。尝试清理浏览器缓存,并禁用所有缓存插件(如 W3 Total Cache 或 WP Super Cache)。
  2. 检查错误日志

检查 Nginx 和 PHP 错误日志,了解更多关于问题的详细信息。

  • 查看 Nginx 错误日志:

    docker logs <nginx_container_name>
  • 查看 PHP 错误日志(通常在容器内的 /var/log/php_errors.log):

    docker exec -it <wordpress_container_name> tail -f /var/log/php_errors.log

    通过上述步骤,你应该能够排查并解决自定义主题使用失败的问题。
    如果问题依然存在,请再评论区留言提供更多详细信息,以便我进一步诊断和解决。

]]>
0 https://im1.cc/WordPress/171.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
WordPress修改固定链接后所有文章返回500错误 https://im1.cc/WordPress/168.html https://im1.cc/WordPress/168.html Sat, 15 Jun 2024 14:28:57 +0800 admin

在WordPress中修改固定链接(Permalinks)后,如果所有文章都返回500错误,通常与以下几个问题有关:

  1. .htaccess 文件配置问题:
  2. WordPress依赖.htaccess文件来处理URL重写。如果这个文件没有正确更新或权限不对,可能会导致500错误。
  3. 检查你的.htaccess文件,确保它包含以下内容(这是默认的WordPress重写规则):

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
  4. 确保.htaccess文件具有正确的权限(通常是644)。
  5. 服务器配置问题:
  6. 确认服务器支持URL重写模块(通常是Apache的mod_rewrite模块)。
  7. 在Apache中启用mod_rewrite模块:

    sudo a2enmod rewrite
    sudo systemctl restart apache2
  8. 确保虚拟主机配置允许重写。你的虚拟主机配置文件(如/etc/apache2/sites-available/000-default.conf)应该包含以下指令:

    <Directory /var/www/html>
     AllowOverride All
    </Directory>
  9. 缓存问题:
  10. 有时,缓存问题也可能导致500错误。清空WordPress缓存插件(如W3 Total Cache、WP Super Cache)的缓存。
  11. 如果使用的是CDN(如Cloudflare),也需要清空CDN缓存。
  12. 插件冲突:
  13. 有些插件可能与自定义固定链接规则冲突。禁用所有插件并逐个启用,查找问题插件。
  14. 错误日志:
  15. 检查服务器错误日志以获取详细错误信息。这可以帮助你确定500错误的确切原因。
  16. 错误日志位置取决于你的服务器配置,但常见位置是/var/log/apache2/error.log或/var/log/httpd/error_log。
  17. WordPress调试模式:
  18. 启用WordPress调试模式以获得更多调试信息。编辑wp-config.php文件,添加或修改以下行:

    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
  19. 这将创建一个debug.log文件在wp-content目录中,你可以在这里找到详细的错误信息。

通过以上检查步骤,你应该能够找到并修复修改固定链接后导致500错误的具体原因。

如果问题依然存在,可以进一步在评论区留言提供错误日志或详细信息,以便我能更精确地诊断和解决您的问题。

]]>
0 https://im1.cc/WordPress/168.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
WordPress如何开发自定义的区块wp:html里面写wpimage? https://im1.cc/WordPress/164.html https://im1.cc/WordPress/164.html Tue, 11 Jun 2024 09:32:36 +0800 admin

在 WordPress 中开发自定义区块并在其中使用其他区块(如 wp:image),可以通过 Gutenberg 块编辑器的 React 组件来实现。这通常涉及使用 @wordpress/blocks 和 @wordpress/block-editor 包来创建和嵌套区块。以下是详细步骤,包括创建一个自定义区块并在其内部使用 wp:image。

1. 设置开发环境

使用 @wordpress/create-block

npx @wordpress/create-block my-custom-block

这个命令会生成一个名为 my-custom-block 的项目文件夹,包含开发自定义区块所需的基础文件。

2. 创建和注册自定义区块

编辑 block.json
定义自定义区块的基本信息:

{
  "$schema": "https://schemas.wp.org/trunk/block.json",
  "apiVersion": 2,
  "name": "my-custom-block/container",
  "title": "My Custom Block",
  "category": "widgets",
  "icon": "smiley",
  "description": "A custom block with nested image block.",
  "supports": {
    "html": false
  },
  "attributes": {
    "content": {
      "type": "string",
      "default": ""
    }
  },
  "textdomain": "my-custom-block",
  "editorScript": "file:./build/index.js",
  "editorStyle": "file:./build/editor.css",
  "style": "file:./build/style.css"
}

编辑 src/index.js
注册区块:

import { registerBlockType } from '@wordpress/blocks';
import Edit from './edit';
import save from './save';
import './style.scss';

registerBlockType('my-custom-block/container', {
    edit: Edit,
    save,
});

编辑 src/edit.js
在编辑视图中使用 wp:image 块:

import { __ } from '@wordpress/i18n';
import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';

const ALLOWED_BLOCKS = ['core/image'];

const Edit = ({ attributes, setAttributes }) => {
    const blockProps = useBlockProps();

    return (
        <div {...blockProps}>
            <h2>{__('My Custom Block', 'my-custom-block')}</h2>
            <InnerBlocks allowedBlocks={ALLOWED_BLOCKS} />
        </div>
    );
};

export default Edit;

编辑 src/save.js
保存视图支持嵌套内容:

import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';

const save = ({ attributes }) => {
    const blockProps = useBlockProps.save();

    return (
        <div {...blockProps}>
            <InnerBlocks.Content />
        </div>
    );
};

export default save;

编辑 src/style.scss
定义区块的样式:

/* style.scss - 前端样式 */
.wp-block-my-custom-block-container {
    padding: 20px;
    border: 1px solid #ccc;
}

/* editor.scss - 编辑器样式 */
.wp-block-my-custom-block-container {
    padding: 20px;
    border: 1px dashed #ccc;
}

3. 构建和加载区块

构建区块
在项目目录中运行以下命令以构建 JavaScript 和样式文件:

npm install
npm run build

加载区块
在 WordPress 插件或主题中注册和加载区块。

插件主文件(例如 my-custom-block.php):

<?php
/*
Plugin Name: My Custom Block
Description: A custom block with nested image block.
Version: 1.0
Author: Your Name
*/

function my_custom_block_register() {
    register_block_type(__DIR__);
}
add_action('init', 'my_custom_block_register');
?>

4. 扩展功能

使用区块属性
如果需要在自定义区块中使用区块属性,可以在 edit.js 和 save.js 中处理属性。例如,为图片块添加自定义属性:

// edit.js
const ALLOWED_BLOCKS = ['core/image'];

const Edit = ({ attributes, setAttributes }) => {
    const blockProps = useBlockProps();

    return (
        <div {...blockProps}>
            <h2>{__('My Custom Block', 'my-custom-block')}</h2>
            <InnerBlocks
                allowedBlocks={ALLOWED_BLOCKS}
                template={[
                    ['core/image', { align: 'center' }]
                ]}
            />
        </div>
    );
};

// save.js
const save = ({ attributes }) => {
    const blockProps = useBlockProps.save();

    return (
        <div {...blockProps}>
            <InnerBlocks.Content />
        </div>
    );
};

使用 InspectorControls
你可以使用 InspectorControls 添加额外的设置:

// edit.js
import { InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';

const Edit = ({ attributes, setAttributes }) => {
    const blockProps = useBlockProps();

    return (
        <div {...blockProps}>
            <InspectorControls>
                <PanelBody title={__('Settings', 'my-custom-block')}>
                    <TextControl
                        label={__('Example Setting', 'my-custom-block')}
                        value={attributes.exampleSetting}
                        onChange={(value) => setAttributes({ exampleSetting: value })}
                    />
                </PanelBody>
            </InspectorControls>
            <h2>{__('My Custom Block', 'my-custom-block')}</h2>
            <InnerBlocks allowedBlocks={ALLOWED_BLOCKS} />
        </div>
    );
};

5. 更新前端显示

如果你需要在前端显示自定义的样式或脚本,可以在 style.scss 中定义样式,或在保存视图中添加自定义 HTML 结构。

自定义前端样式

/* style.scss */
.wp-block-my-custom-block-container .wp-block-image img {
    border-radius: 50%;
}

总结
通过以上步骤,你可以开发一个自定义 WordPress 区块,并在其中嵌套使用 wp:image(即 core/image)等其他核心区块。此流程包括:

  1. 设置开发环境:使用 @wordpress/create-block 生成基础结构。
  2. 创建和注册区块:在 block.json 和 index.js 中定义区块。
  3. 编写区块代码:在 edit.js 中使用 InnerBlocks 嵌套其他区块。
  4. 构建和加载区块:通过 npm 构建并在插件或主题中加载。
  5. 扩展功能:使用属性、控制面板等功能增强区块。

通过这种方式,你可以在自定义区块中实现复杂的布局和功能,利用 WordPress 提供的区块编辑器 API 构建动态和互动性强的内容块。

]]>
0 https://im1.cc/WordPress/164.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/
WordPress如何开发高度自定义的区块? https://im1.cc/WordPress/162.html https://im1.cc/WordPress/162.html Tue, 11 Jun 2024 09:08:00 +0800 admin

在 WordPress 中开发高度自定义的区块(blocks)除了使用 HTML,还可以利用现代 JavaScript、React、和 WordPress 的 @wordpress/block-editor 和 @wordpress/blocks 等包。这里是详细步骤,包括设置开发环境、创建区块、以及如何实现自定义功能。

1. 设置开发环境

使用 @wordpress/create-block 工具
WordPress 提供了 @wordpress/create-block 工具,简化区块开发的基本设置。

npx @wordpress/create-block my-custom-block

这会创建一个新项目文件夹 my-custom-block,包含所有必要的文件和配置。

2. 理解区块的基本结构

文件结构

my-custom-block/
├── build/
├── src/
│   ├── index.js
│   ├── edit.js
│   ├── save.js
│   ├── style.scss
│   └── editor.scss
├── block.json
├── package.json
├── README.md
└── webpack.config.js
  • src/: 包含区块的源代码。
  • block.json: 定义区块的元数据。
  • package.json: 包含项目的依赖和脚本。
  • webpack.config.js: 用于打包项目。

重要文件

  • block.json:定义区块的基本信息和属性。
  • index.js:注册区块。
  • edit.js:编辑视图(用于区块编辑器)。
  • save.js:保存视图(用于前端展示)。
  1. 编写区块代码
    block.json
    定义区块的基本信息:

    {
      "$schema": "https://schemas.wp.org/trunk/block.json",
      "apiVersion": 2,
      "name": "my-custom-block/block",
      "title": "My Custom Block",
      "category": "widgets",
      "icon": "smiley",
      "description": "A custom block example.",
      "supports": {
     "html": false
      },
      "textdomain": "my-custom-block",
      "editorScript": "file:./build/index.js",
      "editorStyle": "file:./build/editor.css",
      "style": "file:./build/style.css"
    }

    src/index.js
    注册区块:

    import { registerBlockType } from '@wordpress/blocks';
    import Edit from './edit';
    import save from './save';
    import './style.scss';
    
    registerBlockType('my-custom-block/block', {
     edit: Edit,
     save,
    });

src/edit.js
定义编辑视图:

import { useBlockProps } from '@wordpress/block-editor';
import { TextControl } from '@wordpress/components';

const Edit = ({ attributes, setAttributes }) => {
    const blockProps = useBlockProps();

    return (
        <div {...blockProps}>
            <TextControl
                label="Example Text"
                value={attributes.exampleText}
                onChange={(value) => setAttributes({ exampleText: value })}
            />
        </div>
    );
};

export default Edit;

src/save.js
定义保存视图:

import { useBlockProps } from '@wordpress/block-editor';

const save = ({ attributes }) => {
    const blockProps = useBlockProps.save();

    return (
        <div {...blockProps}>
            {attributes.exampleText}
        </div>
    );
};

export default save;

src/style.scss 和 src/editor.scss
定义区块的样式:

/* style.scss - 前端样式 */
.wp-block-my-custom-block-block {
    padding: 20px;
    border: 1px solid #ccc;
}

/* editor.scss - 编辑器样式 */
.wp-block-my-custom-block-block {
    padding: 20px;
    border: 1px dashed #ccc;
}

4. 构建区块

使用 npm 脚本来打包区块:

npm install
npm run build

这会编译你的 JavaScript 和 SCSS 文件到 build 目录。

5. 加载区块

确保在你的 WordPress 主题或插件中注册和加载区块。

PHP 代码
在插件或主题的 PHP 文件中:

function my_custom_block_register() {
    register_block_type(__DIR__);
}
add_action('init', 'my_custom_block_register');

6. 扩展功能

使用更多 React 组件
你可以使用 WordPress 提供的各种 React 组件,如 TextControl, MediaUpload, InspectorControls 等,以增强区块的功能。

import { InspectorControls, MediaUpload } from '@wordpress/block-editor';
import { Button, PanelBody } from '@wordpress/components';

// 在 edit.js 中使用这些组件
<InspectorControls>
    <PanelBody title="Media Settings">
        <MediaUpload
            onSelect={(media) => setAttributes({ mediaId: media.id, mediaUrl: media.url })}
            allowedTypes={['image']}
            render={({ open }) => (
                <Button onClick={open} className="button button-large">
                    Select Image
                </Button>
            )}
        />
    </PanelBody>
</InspectorControls>

动态区块
创建动态区块可以在保存时执行 PHP 代码生成内容:

function render_my_custom_block($attributes, $content) {
    // 使用 $attributes 和 $content 来生成动态内容
    return '<div class="my-custom-block">' . esc_html($attributes['exampleText']) . '</div>';
}

register_block_type('my-custom-block/block', [
    'render_callback' => 'render_my_custom_block',
]);

总结
开发高度自定义的 WordPress 区块涉及现代 JavaScript(尤其是 React)和 WordPress 提供的区块编辑器 API。你可以从基础的 HTML 开始,逐步增加交互性和复杂性。这里是主要步骤:

  1. 设置开发环境:使用 @wordpress/create-block 工具。
  2. 定义区块结构:包括 block.json, index.js, edit.js, 和 save.js。
  3. 编写代码:利用 React 和 WordPress 的 API 实现自定义功能。
  4. 构建和加载区块:通过 PHP 注册和加载区块。
  5. 扩展功能:利用 WordPress 提供的组件和钩子,进一步定制区块。

这种方法可以让你在 WordPress 中创建功能丰富且高度自定义的区块,满足各种复杂的需求。

]]>
0 https://im1.cc/WordPress/162.html#comments https://im1.cc/feed/tag/%E4%BF%A1%E6%81%AF/