我写了一个插件。
其中一个插件的设置是网址/页面。
我希望我的客户能够继续使用主题的页面构建器,创建任何链接到插件设置中输入的URL的按钮。
客户端可以为他们创建的每个按钮手动输入URL,但这将是单调乏味的,如果插件设置中的URL发生变化,将会非常痛苦。
因此,我希望能够将插件的URL设置值用作第三方按钮短代码的URL属性。
这可能吗?类似的东西:
[button url="{get the plugin's URL setting}"][/button]
答案 0 :(得分:0)
肯定是可能的。
您需要在插件中添加短代码功能。最好使用唯一的名称来避免冲突(不是'按钮')。 在你的插件php文件中添加函数并使用add_shortcode函数注册它,如下所示:
function shortcodeName_function( $atts ) {
// add attribute handling and get the 'url' parameter
$output = '<button a href="'. $url . '" class="button">';
return $output;
}
add_shortcode( 'shortcodeName', 'shortcodeName_function');
现在,当插件被激活时,你现在可以使用这个名称的短代码。
[shortcodeName]
有关参数处理的更多信息,请参阅wordpress文档的链接:wordpress shortcode api
编辑:对不起,我想我错过了一点。你可以做的是 - 将插件网址设置存储在 cookie 中,并在短代码中检查cookie值。
答案 1 :(得分:0)
当shortcode没有属性url时,你可以在短代码返回输出中提供默认设置url。
喜欢这个
add_shortcode( 'button', 'shortcode_function_button');
function shortcode_function_button( $atts ){
$attr = shortcode_atts( array(
'url' => get_option( 'button_default_url' ) , // get your setting default url if shortcode have not
), $atts ); // attr url="http://example.com" then it use default
// setting url
return '<a href="'.esc_url($attr['url']).'" class="button">Button</a>';
}
如果已在插件或主题中构建短代码,则找到短代码回调函数并以这种方式更改atts。
如果在查找第三方短代码回调名称时出现问题,请在插件文件中检查所有已注册的带回调的短代码。
global $shortcode_tags;
print_r( $shortcode_tags );
// show all shortcodes with callback
/*Array
(
[embed] => __return_false
[wp_caption] => img_caption_shortcode
[caption] => img_caption_shortcode
[gallery] => gallery_shortcode
[playlist] => wp_playlist_shortcode
[audio] => wp_audio_shortcode
[video] => wp_video_shortcode
[button] => button_shortcode
)*/
如果您不想对您的插件短信进行任何更改并在插件中进行管理
删除以前声明的thired party插件的短代码,然后在插件顶部添加。
remove_shortcode('button');
// https://developer.wordpress.org/reference/functions/remove_shortcode/
删除后重新创建相同的短代码标签,但使用自己的回拨名称,并像这样的短信代码一样工作
add_shortcode( 'button', 'your_own_callback' );
function your_own_callback( $atts, $content ){
$attr = shortcode_atts( array(
'url' => get_option( 'button_default_url' ) , // Use same atts thired party using atts
), $atts );
return button_shortcode( $attr, $content); // Use thired party callback function name.
}