我具有此通知功能,需要在代码的不同位置调用它。我需要将其放置在子主题以及plugins目录中的任何文件都可以访问的位置。
function send_notification($tokens, $message)
{
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'registration_ids' => $tokens,
'data' => $message
);
$headers = array(
'Authorization:key = My_Token',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
任何解决方案和参考将不胜感激。谢谢。
答案 0 :(得分:4)
由于您拥有一个功能广泛的函数,请考虑为其提供一个更唯一的名称以防止命名冲突,例如naser_send_notitification()
而不是send_notification
,或者如果可以的话-考虑使用namespace或class。
现在要回答您的问题,实际上functions.php
通常是可以在任何地方访问的“广泛范围”功能的安全选择。如果您查看Action Reference,就会发现after_setup_theme
是在相对较早的时间触发的,因此您可以从该挂钩或更晚的时间访问您的函数-因为此刻该函数将可用。但是,它确实在plugins_loaded
之后,因此如果您在此之前需要它,则需要将其变成带有File Header或“ MU插件”的插件。
如果您需要尽快有效地访问它,请考虑将其放在/wp-content/mu-plugins/
中的文件中,并为其命名,甚至使用custom-functions.php
之类的名称。这些文件称为Must-Use Plugins。此目录中的文件始终会被加载,并且始终在其他任何文件之前运行,因此在其中声明的函数可以尽早访问。通常,这是我需要确保代码独立于主题,始终打开且无法停用的代码的地方。
如此有效:
1)将函数重命名为更独特的名称,例如naser_send_notitification()
2)将此代码放入/wp-content/mu-plugins/custom-funtions.php
3)现在,您应该可以在muplugins_loaded
钩子(几乎在任何地方)之后的任何函数或钩子中调用naser_send_notification( $tokens, $message )
答案 1 :(得分:2)
我相信wordpress shortcodes将是处理此问题的最佳方法。因为搞乱wordpress核心文件不是一个好习惯,并且会导致一些问题,例如升级时删除代码等。
简码有很多好处,对于您的特定问题,这将是有益的,因为:
tmux kill kill-server
functions.php
代码文件和仪表板编辑器中访问 完整代码:(仅放在php
内)
functions.php
在主题或插件中的任意位置调用它:(像这样)
wordpress编辑器:
function send_notification( $atts )
{
extract(shortcode_atts(array(
"tokens" => '',
"message" => ''
), $atts));
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'registration_ids' => $tokens,
'data' => $message
);
$headers = array(
'Authorization:key = My_Token',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
add_shortcode('send-notification', 'send_notification');
主题/插件文件:
[send-notification token=XXXX message="hello"]
有用的资源:
答案 2 :(得分:1)
这是解决方案: 每行的每一件事都被评论
function do_something( $a = "", $b = "" ) { // create your function
echo '<code>';
print_r( $a ); // `print_r` the array data inside the 1st argument
echo '</code>';
echo '<br />'.$b; // echo linebreak and value of 2nd argument
}
add_action( 'danish', 'do_something', 10, 2 );
// create your own action with params('action name', 'callback funtion', priority, num_of params)
然后钩住您需要的任何地方
$a = array(
'eye patch' => 'yes',
'parrot' => true,
'wooden leg' => 1
);
$b = __( 'And Hook said: "I ate ice cream with Peter Pan."', 'textdomain' );
// Executes the action hook named 'danish'
do_action('danish', $a, $b);
就是这样。
答案 3 :(得分:0)
根据this question:
步骤1:将您的函数写入插件中的类
步骤2:在您的主题中创建该类的对象
步骤3:通过该对象访问您的函数。
// inside your plugin
class foo {
public function send_notification() {
return "whatever you want";
}
}
// inside your themes functions.php
$foo_object = new foo();
// use the object to access your function:
$foo_object->send_notification();