您的位置:首页 > 游戏 > 手游 > 应当加强日常_推广网最新版本下载_seo是什么的_新闻最新头条10条

应当加强日常_推广网最新版本下载_seo是什么的_新闻最新头条10条

2024/12/23 9:57:50 来源:https://blog.csdn.net/wustzdd/article/details/142563307  浏览:    关键词:应当加强日常_推广网最新版本下载_seo是什么的_新闻最新头条10条
应当加强日常_推广网最新版本下载_seo是什么的_新闻最新头条10条

从 8.3 开始的 WooCommerce版本中,您可能会注意到您的自定义付款方式在结账区块中不可用。

例如,如果您尝试停用商店中除自定义付款方式之外的所有付款方式,您可能会收到如下错误消息:

自定义付款方式未显示在结账栏中

这里我使用 Storefront 主题作为示例,但任何 WordPress 主题都会出现相同的错误消息。

但可以肯定的是,当您使用旧的[woocommerce_checkout]简码时,一切都运行良好。

是的,之前发布的支付网关教程似乎不再完整,但我们今天将通过这个额外的教程来更改它,我将逐步指导您应该做什么,以添加自定义的兼容性WooCommerce 购物车和结帐块的 WooCommerce 付款方式。

这就是我们在本教程结束时要实现的目标:

自定义支付网关与 WooCommerce 结帐块集成

当然,我还会向您展示一些巧妙的额外内容,例如为您的付款方式添加自定义图标。

文章目录

  • 服务器端集成 
    • 注册一个块支持 PHP 类 
    • 块支持 PHP 类 
    • 声明兼容性 
  • 客户端集成 
    • 设置项目 
    • 为 WooCommerce Checkout 区块注册自定义付款方式 
    • 添加付款方式图标 

服务器端集成 

首先,让我们从服务器端集成开始,我很确定你们中的许多人都觉得使用 PHP 开发比 JavaScript + React 更舒服,所以让我们从简单的事情开始。

注册一个块支持 PHP 类 

“区块支持PHP类”是除主要支付网关类之外的PHP类。我们将使用下面的简单代码片段来注册它,这与我们在 woocommerce_payment_gateways hook 中注册主网关类时所做的类似。

 
  1. add_action( 'woocommerce_blocks_loaded', 'rudr_gateway_block_support' );
  2. function rudr_gateway_block_support() {
  3. // if( ! class_exists( 'Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType' ) ) {
  4. // return;
  5. // }
  6. // 在这里引入 "gateway block support class" 文件
  7. require_once __DIR__ . '/includes/class-wc-misha-gateway-blocks-support.php';
  8. // 注册我们刚才引入的 PHP 类
  9. add_action(
  10. 'woocommerce_blocks_payment_method_type_registration',
  11. function( Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry $payment_method_registry ) {
  12. $payment_method_registry->register( new WC_Misha_Gateway_Blocks_Support );
  13. }
  14. );
  15. }

请记住以下几点:

  • 我注销了class_exists()条件,因为我们不再需要它,因为结账块现在是 WooCommerce 的一部分,而不是独立的插件。
  • 我们的块支持 PHP 类本身将位于一个单独的文件中,我们将在下一步中class-wc-misha-gateway-blocks-support.php查看它。

块支持 PHP 类 

在这一部分中,我将创建一个WC_Misha_Gateway_Blocks_Support PHP 类来扩展 WooCommerce 的 AbstractPaymentMethodType 类。同时不要忘记我们已经有了扩展 WC_Payment_Gateway 的WC_Misha_Gateway 类。

就我而言,我将其放入includes/class-wc-misha-gateway-blocks-support.php.

 
  1. <?php
  2. use Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType;
  3. final class WC_Misha_Gateway_Blocks_Support extends AbstractPaymentMethodType {
  4. private $gateway;
  5. protected $name = 'misha'; // payment gateway id
  6. public function initialize() {
  7. // get payment gateway settings
  8. $this->settings = get_option( "woocommerce_{$this->name}_settings", array() );
  9. // you can also initialize your payment gateway here
  10. // $gateways = WC()->payment_gateways->payment_gateways();
  11. // $this->gateway = $gateways[ $this->name ];
  12. }
  13. public function is_active() {
  14. return ! empty( $this->settings[ 'enabled' ] ) && 'yes' === $this->settings[ 'enabled' ];
  15. }
  16. public function get_payment_method_script_handles() {
  17. wp_register_script(
  18. 'wc-misha-blocks-integration',
  19. plugin_dir_url( __DIR__ ) . 'build/index.js',
  20. array(
  21. 'wc-blocks-registry',
  22. 'wc-settings',
  23. 'wp-element',
  24. 'wp-html-entities',
  25. ),
  26. null, // or time() or filemtime( ... ) to skip caching
  27. true
  28. );
  29. return array( 'wc-misha-blocks-integration' );
  30. }
  31. public function get_payment_method_data() {
  32. return array(
  33. 'title' => $this->get_setting( 'title' ),
  34. // almost the same way:
  35. // 'title' => isset( $this->settings[ 'title' ] ) ? $this->settings[ 'title' ] : 'Default value';
  36. 'description' => $this->get_setting( 'description' ),
  37. // if $this->gateway was initialized on line 15
  38. // 'supports' => array_filter( $this->gateway->supports, [ $this->gateway, 'supports' ] ),
  39. // example of getting a public key
  40. // 'publicKey' => $this->get_publishable_key(),
  41. );
  42. }
  43. //private function get_publishable_key() {
  44. // $test_mode = ( ! empty( $this->settings[ 'testmode' ] ) && 'yes' === $this->settings[ 'testmode' ] );
  45. // $setting_key = $test_mode ? 'test_publishable_key' : 'publishable_key';
  46. // return ! empty( $this->settings[ $setting_key ] ) ? $this->settings[ $setting_key ] : '';
  47. //}
  48. }

首先让我们看一下类的属性和方法。

属性:

  • $name– 这是此步骤中的支付网关 ID 。
  • $gateway– 我们可以在这里存储支付网关对象的实例,但这不是必需的,所以我在代码中注释了这部分。

方法:

  • is_active(),
  • get_payment_method_script_handles()– 这是我们包含 JavaScript 文件的地方,其中包含集成的客户端部分。
  • get_payment_method_data()– 提供您将在前端作为关联数组使用的所有必要数据。

您还可以使用index.asset.php来获取脚本版本和依赖项。

 
  1. public function get_payment_method_script_handles() {
  2. $asset_path = plugin_dir_path( __DIR__ ) . 'build/index.asset.php';
  3. $version = null;
  4. $dependencies = array();
  5. if( file_exists( $asset_path ) ) {
  6. $asset = require $asset_path;
  7. $version = isset( $asset[ 'version' ] ) ? $asset[ 'version' ] : $version;
  8. $dependencies = isset( $asset[ 'dependencies' ] ) ? $asset[ 'dependencies' ] : $dependencies;
  9. }
  10. wp_register_script(
  11. 'wc-misha-blocks-integration',
  12. plugin_dir_url( __DIR__ ) . 'build/index.js',
  13. $dependencies,
  14. $version,
  15. true
  16. );
  17. return array( 'wc-misha-blocks-integration' );
  18. }

声明兼容性 

当您想让用户知道您的付款方式与 WooCommerce Checkout 块不兼容时,此部分通常很有用。

当用户尝试编辑古腾堡中的结账页面时,他们将收到通知:

自定义付款方式不支持 WooCommerce 结账阻止的通知。

方法如下:

 
  1. add_action( 'before_woocommerce_init', 'rudr_cart_checkout_blocks_compatibility' );
  2. function rudr_cart_checkout_blocks_compatibility() {
  3. if( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
  4. \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
  5. 'cart_checkout_blocks',
  6. __FILE__,
  7. false // true (compatible, default) or false (not compatible)
  8. );
  9. }
  10. }

客户端集成 

设置项目 

再次强调,我希望本教程中的内容保持超级简单,因此我将使用@wordpress/scripts即可。

在我们的构建中,您肯定可以进一步配置 WooCommerce 混合构建,这样您就可以使用import { registerPaymentMethod } from ....

这就是我的文件夹结构的样子:

具有 WooCommerce 结账块支持的自定义支付网关的文件夹结构。

为 WooCommerce Checkout 区块注册自定义付款方式 

以下是/src/index.js文件,以防您有疑问。

 
  1. import { decodeEntities } from '@wordpress/html-entities';
  2. const { registerPaymentMethod } = window.wc.wcBlocksRegistry
  3. const { getSetting } = window.wc.wcSettings
  4. const settings = getSetting( 'misha_data', {} )
  5. const label = decodeEntities( settings.title )
  6. const Content = () => {
  7. return decodeEntities( settings.description || '' )
  8. }
  9. const Label = ( props ) => {
  10. const { PaymentMethodLabel } = props.components
  11. return <PaymentMethodLabel text={ label } />
  12. }
  13. registerPaymentMethod( {
  14. name: "misha",
  15. label: <Label />,
  16. content: <Content />,
  17. edit: <Content />,
  18. canMakePayment: () => true,
  19. ariaLabel: label,
  20. supports: {
  21. features: settings.supports,
  22. }
  23. })

也许详细讨论 registerPaymentMethod() 以及讨论 registerExpressPaymentMethod()是一个好主意,但我认为我们将在我的博客上的下一个教程中更深入地研究特定示例。

最后!恭喜你!

自定义支付网关与 WooCommerce 结帐块集成

如果您想知道付款方式标题和说明的来源:

添加付款方式图标 

由于我向您承诺了更多示例,并且您可能不想等到下一个教程,所以让我们从这个开始。

我现在的目标是在 WooCommerce Checkout 块中的自定义支付网关标题附近显示一个图标:

将徽标添加到 WooCommerce 结帐块中的自定义支付网关。

首先,让我们修改我们的块支持 PHP 类,特别是它的get_payment_method_data(),我们将在那里提供另一个参数:

 
  1. public function get_payment_method_data() {
  2. return array(
  3. 'title' => $this->get_setting( 'title' ),
  4. 'description' => $this->get_setting( 'description' ),
  5. 'icon' => plugin_dir_url( __DIR__ ) . 'assets/icon.png',
  6. ...

然后我建议为其创建另一个 React 组件:

 
  1. const Icon = () => {
  2. return settings.icon
  3. ? <img src={settings.icon} style={{ float: 'right', marginRight: '20px' }} />
  4. : ''
  5. }
  6. const Label = () => {
  7. return (
  8. <span style={{ width: '100%' }}>
  9. {label}
  10. <Icon />
  11. </span>
  12. );
  13. };

如果未提供图标图像 URL,则不会显示<img>标签,太棒了!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com