Tengo esta función de notificación y necesito llamarla en diferentes lugares del código. Necesito ponerlo en algún lugar al que pueda acceder cualquier archivo dentro de mi tema secundario, así como en el directorio de complementos.
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;
}
- Primera pregunta, ¿Dónde ponerlo, actualmente está en functions.php?
- Segunda pregunta, ¿cómo llamarlo en diferentes lugares?
Cualquier solución y referencia sería apreciada. Gracias.
Xhynk
Dado que tiene una función con un alcance amplio, considere darle un nombre más exclusivo para evitar conflictos de nombres, como naser_send_notitification()
en lugar de solo send_notification
o si puede, considere usar un espacio de nombres o clase.
Ahora para responder a tu pregunta, functions.php
en realidad, suele ser una apuesta segura para las funciones de “amplio alcance” que deben ser accesibles en casi cualquier lugar. Si miras el Referencia de acción verás eso after_setup_theme
se activa relativamente temprano, lo que permite que su función sea accesible desde ese gancho o más tarde, ya que estará disponible durante este momento. Sin embargo, viene después plugins_loaded
por lo que si lo necesita antes, deberá convertirlo en un complemento con un Encabezado de archivo o un “Complemento MU”.
Si necesita que esté accesible lo antes posible, considere ponerlo en un archivo en /wp-content/mu-plugins/
y darle un nombre, incluso algo como custom-functions.php
. Estos archivos se llaman Complementos imprescindibles. Los archivos en este directorio siempre se cargan y siempre se ejecutan antes que cualquier otra cosa, por lo que las funciones declaradas en ellos son accesibles increíblemente pronto. Por lo general, aquí es donde coloco el código que necesito para asegurarme de que sea independiente del tema, esté siempre activado y no se pueda desactivar.
Tan efectivamente:
1) Cambie el nombre de su función a algo un poco más único, como naser_send_notitification()
2) Pon este código en /wp-content/mu-plugins/custom-funtions.php
3) Ahora debería poder llamar naser_send_notification( $tokens, $message )
en cualquier función o gancho que viene después de la muplugins_loaded
gancho (que está casi en cualquier lugar)
Khalil danés
Aquí está la solución: todo se comenta en cada línea
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)
después Gancho donde sea que necesites
$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);
eso es todo.
atlas_gondal
Yo creo códigos cortos de wordpress sería el mejor enfoque para manejar esto. Porque jugar con los archivos principales de wordpress no es una buena práctica y genera varios problemas, como la eliminación del código en la actualización, etc.
Hay varios beneficios de los códigos cortos y para su problema específico sería beneficioso porque:
- se puede colocar en temas padre/hijo
functions.php
- puede ser accesible en
php
archivos de código y también en el editor del tablero
Código completo: (simplemente coloque dentro functions.php
)
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');
Llámalo en cualquier parte del tema o complemento: (como esto)
-
redactor de wordpress:
[send-notification token=XXXX message="hello"]
-
archivos de tema/complemento:
<?php echo do_shortcode('[send-notification token=XXXX message="hello"]'); ?>
Recursos útiles:
- WordPress Código corto con parámetros
- A tutorial sobre códigos cortos de WordPress
- Creación de código corto con diferentes tipos de parámetros
Según esta pregunta:
paso 1: escriba su función en una clase dentro de su complemento
paso 2: crea un objeto de esa clase en tu tema
paso 3: acceda a su función por ese objeto.
// 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();