如何从功能插件中提取代码片段?

时间:2021-01-21 作者:Jani

我有一个扩展现有(原始)插件的功能插件。(之前我只是在分叉,但在更新了原来的插件之后,很明显这不是一个好的做法。)我保存了分叉时使用的代码片段,并希望将它们添加到原始插件中。

我在原始插件中找到了一个钩子:

<?php do_action( \'es_wishlist_add_button\', get_the_ID() ); ?>
我想输入以下代码:

<?php if ( $es_settings->share_facebook ) : ?>
        <a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=<?php the_permalink(); ?>"><i class="fa fa-facebook" aria-hidden="true"></i></a>
    <?php endif; ?>
    <?php if ( $es_settings->share_twitter ) : ?>
        <a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=<?php the_permalink(); ?>"><i class="fa fa-twitter" aria-hidden="true"></i></a>
    <?php endif; ?>
    <?php if ( $es_settings->share_google_plus ) : ?>
        <a class="a2a_button_google_plus" href="https://www.addtoany.com/add_to/facebook?linkurl=<?php the_permalink(); ?>"><i class="fa fa-google-plus" aria-hidden="true"></i></a>
    <?php endif; ?><?php if ( $es_settings->share_linkedin ) : ?>
        <a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/facebook?linkedin=<?php the_permalink(); ?>"><i class="fa fa-linkedin" aria-hidden="true"></i></a>
    <?php endif; ?>
    <?php if ( $es_settings->use_pdf ) : ?>
        <a href="<?php echo add_query_arg( "es-pdf", get_the_ID(), get_the_permalink() ); ?>" target="_blank"><i class="fa fa-file-pdf-o" aria-hidden="true"></i></a>
    <?php endif; ?>
我在函数插件的函数中使用它。php:

function epf_extra_buttons() {
    echo \'<?php if ( $es_settings->share_facebook ) : ?>
        <a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=<?php the_permalink(); ?>"><i class="fa fa-facebook" aria-hidden="true"></i></a>
    <?php endif; ?>
    <?php if ( $es_settings->share_twitter ) : ?>
        <a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=<?php the_permalink(); ?>"><i class="fa fa-twitter" aria-hidden="true"></i></a>
    <?php endif; ?>
    <?php if ( $es_settings->share_google_plus ) : ?>
        <a class="a2a_button_google_plus" href="https://www.addtoany.com/add_to/facebook?linkurl=<?php the_permalink(); ?>"><i class="fa fa-google-plus" aria-hidden="true"></i></a>
    <?php endif; ?><?php if ( $es_settings->share_linkedin ) : ?>
        <a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/facebook?linkedin=<?php the_permalink(); ?>"><i class="fa fa-linkedin" aria-hidden="true"></i></a>
    <?php endif; ?>
    <?php if ( $es_settings->use_pdf ) : ?>
        <a href="<?php echo add_query_arg( "es-pdf", get_the_ID(), get_the_permalink() ); ?>" target="_blank"><i class="fa fa-file-pdf-o" aria-hidden="true"></i></a>
    <?php endif; ?>\';
}

add_action(\'es_wishlist_add_button\',\'epf_extra_buttons\');

然而,我没有收到预期的结果。我做错了什么?

1 个回复
最合适的回答,由SO网友:Rup 整理而成

你在试着回应<?php 标签,但这不起作用:它们不会被处理。相反,您需要在函数中的PHP语句中复制该逻辑。以下是部分答案:

function epf_extra_buttons( $post_ID ) {
    // TODO: where does $es_settings come from?

    $encoded_permalink = urlencode(get_the_permalink());
    if ( $es_settings->share_facebook ) {
        echo \'<a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=\' . $encoded_permalink . \'"><i class="fa fa-facebook" aria-hidden="true"></i></a>\';
    }
    if ( $es_settings->share_twitter ) {
        echo \'<a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=\' . $encoded_permalink . \'"><i class="fa fa-twitter" aria-hidden="true"></i></a>\';
    }
    if ( $es_settings->share_google_plus ) {
        echo \'<a class="a2a_button_google_plus" href="https://www.addtoany.com/add_to/facebook?linkurl=\' . $encoded_permalink . \'"><i class="fa fa-google-plus" aria-hidden="true"></i></a>\';
    }
    if ( $es_settings->share_linkedin ) {
        echo \'<a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/facebook?linkedin=\' . $encoded_permalink . \'"><i class="fa fa-linkedin" aria-hidden="true"></i></a>\';
    }
    if ( $es_settings->use_pdf ) {
        $pdf_url = add_query_arg( "es-pdf", get_the_ID(), get_the_permalink() );
        echo \'<a href="\' .esc_url( $pdf_url ) . \'" target="_blank"><i class="fa fa-file-pdf-o" aria-hidden="true"></i></a>\';
    }
}

add_action(\'es_wishlist_add_button\',\'epf_extra_buttons\');
请注意,我添加了一些您丢失的转义和URL编码。我还添加了$post\\u ID作为参数,您可以从do\\u操作调用中看到它已经传入。

但是,这不会按原样工作,因为此函数中没有可用的$es\\U设置变量。你必须弄清楚这是从哪里来的:它是全球性的吗?您是否可以根据您拥有的信息(即$post\\u ID)进行查找或计算?