为了账号安全,请及时绑定邮箱和手机立即绑定

在 WooCommerce 产品页面上显示作者元数据

在 WooCommerce 产品页面上显示作者元数据

PHP
偶然的你 2022-01-02 15:47:00
我在我的 WordPress 网站上使用 WooCommerce 产品供应商插件。每个供应商都有自己的供应商资料。我想在每个供应商产品上显示作者元数据,例如 LinkedIn、facebook、wikipedia 等。社交资料数据存储在常规 WordPress 用户资料中。如果您在 WP 安装上创建新用户,您应该在联系信息表单表下看到 facebook 个人资料 URL、维基百科、LinkedIn 等。因此,每个用户只需在他们的 WordPress 个人资料中输入他们的社交个人资料。我是 PHP 新手,所以可能是一个非常基本的问题。我试图通过大量的跟踪和错误使我的代码工作。但是,当我尝试从标题中获取用户 ID 时,我的代码遇到了死胡同。如果我做 var_dump( $vendor_data ); 我得到了我需要的所有用户信息:array(1) { [63]=> array(21) { ["notes"]=> string(0) "" ["logo"]=> string(0) "" ["profile"]=> string(0) "" ["email"]=> string(0) "" ["admins"]=> array(1) { [0]=> int(20) } ["commission"]=> int(70) ["commission_type"]=> string(10) "percentage" ["paypal"]=> string(0) "" ["timezone"]=> string(5) "UTC+2" ["enable_bookings"]=> string(2) "no" ["per_product_shipping"]=> string(2) "no" ["instant_payout"]=> string(2) "no" ["term_id"]=> int(63) ["name"]=> string(9) "Tobias M." ["slug"]=> string(8) "tobias-m" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(63) ["taxonomy"]=> string(20) "wcpv_product_vendors" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(2) } }使用上面的 var_dump,我将第 11 行更改为:$vendor_data[ $vendor_id ] = WC_Product_Vendors_Utils::get_vendor_data_by_id( $vendor_id )->name;`在做了一些研究之后,我发现 -> 无效,因为 -> 意味着我正在访问一个对象,但就我而言,我需要从数组中检索数据。因此我尝试了这样的事情,但仍然没有运气:// get vendor data$vendor_data = WC_Product_Vendors_Utils::get_vendor_data_by_id( $vendor_id['name'] );$name = $vendor_data['name'];
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

我从未使用过 WooCommerce Vendors 插件,所以我没有测试过这段代码。更具体地说,它看起来$vendor_id可能只是与供应商关联的常规用户 ID。如果是这种情况,那么用于获取用户 ID 的子例程将是不必要的,但是,以防万一这是错误的,我将包含包含它的代码的第二个版本。我也在重写它以避免在里面没有任何东西时输出一个空的 div。


此外,woocommerce_after_add_to_cart_button是一个出现在single-product模板中的钩子,因此您不需要测试您是否正在显示带有is_product().


/**

 * Output a Wikipedia image-link for a a Woocommerce Vendor

 * If $vendor_id is equal to $user_id

 **/

add_action( 'woocommerce_after_add_to_cart_button', 'our_vendor_info' );


function our_vendor_info() {


    // get vendor id from product id

    $vendor_id = WC_Product_Vendors_Utils::get_vendor_id_from_product( get_the_ID() );


    if ( $vendor_id && get_the_author_meta( 'wikipedia', $vendor_id ) ) {


        // Get Wikipedia profile

        $wikipedia = get_the_author_meta( 'wikipedia', $vendor_id );   


        echo '<div class="large-3 columns venprofilelink">';


        echo '<span class="some-talent">

            <a href="'. $wikipedia .'" target="blank" rel="noopener noreferrer">

                <img src="/wp-content/uploads/2019/09/wikipedia-logo.svg" />

            </a>

         </span>'; 


        echo '</div>';


    }


}

如果情况并非如此,而且$vendor_id确实是一个唯一的 ID 号,这意味着将它与特定用户 ID 相关联的编码人员不必费心将后者包含在 $vendor_id 数据或其任何实用程序功能或过滤器或操作中,那么您需要一些更复杂的东西,比如你或其他编码员写的:


/**

 * If $vendor_id is *not* equal to $user_id

 **/

add_action( 'woocommerce_after_add_to_cart_button', 'our_vendor_info' );


function our_vendor_info() {


    // get vendor id from product id

    $vendor_id = WC_Product_Vendors_Utils::get_vendor_id_from_product( get_the_ID() );


    //if there's no vendor_id then nothing to do here

    if ( $vendor_id ) {


        // get vendor data so we can get User ID

        $vendor_data = WC_Product_Vendors_Utils::get_vendor_data_by_id( $vendor_id ); 


        //get_userdatabylogin() is deprecated, also $vendor_data does not include a "login," but does include a slug

        //(which should be reliable)

        $user_id = get_user_by( 'slug', $vendor_data['slug'] )->ID ; 


        //don't output anything unless there's a reason to do it

        if ( get_the_author_meta( 'wikipedia', $user_id ) ) {


            // Get Wikipedia profile url

            $wikipedia = get_the_author_meta( 'wikipedia', $user_id );   


            echo '<div class="large-3 columns venprofilelink">';


            echo '<span class="some-talent">

                <a href="'. $wikipedia .'" target="blank" rel="noopener noreferrer">

                    <img src="/wp-content/uploads/2019/09/wikipedia-logo.svg" />

                </a>

             </span>'; 


            echo '</div>';


        }


    }


}


查看完整回答
反对 回复 2022-01-02
  • 1 回答
  • 0 关注
  • 296 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信