Comprobar si existe gancho de acción antes de añadir acciones a él

Estoy tratando de agregar un
rel=next
y
rel=prev
Etiquetas de enlace en el elemento principal de
image.php
archivo de plantilla. Tengo Wordpress SEO instalado y me gustaría conectar este plugin
wpseo_head
acción del gancho para lograr ese objetivo. Lo que me gustaría hacer es comprobar si el
wpseo_head
gancho de acción existe antes de conectar mi acción y si no es como en el caso del plugin no está instalan o desactivada, usaría
wp_head
en su lugar.

Lo he probado
has_action('wpseo_head')
la función, pero el problema es si no hay ninguna función unida a este gancho volverá
false
incluso si se instala el plugin activado.
if (has_action('wpseo_head')) {
    add_action('wpseo_head', 'ad_add_link_tag_image_head');
} else {
    add_action('wp_head', 'ad_add_link_tag_image_head');
}
¿Cuál es el camino para buscar acciones que pueden no existir en Wordpress? Gracias..



Solución 1

Usted no puede comprobar si una acción se llamará antes de que ocurra. Aunque ya existían las devoluciones de llamada a la acción no habría ninguna garantía de la correspondencia
do_action()
se utilizará. En tu caso, prueba con
is_plugin_active()
:

if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) )
{
    // do something
}
Como @Barry que Carlyon menciona en los comentarios, el directorio puede cambiar el nombre.

Usted podrían comprobar si una constante o una clase ha sido definido/declarado. Pero no hay solución al 100%: constantes, funciones o clases pueden cambiar después de una actualización, u otro plugin define estas constantes ya.

Especialmente en este caso: hay another WP SEO plugin disponible (nunca entendí por qué usaba un nombre que ya estaba en uso...), y podrías conseguir una coincidencia positiva falsa. Existe la función
get_file_data()
.

Algunos pseudo código no probado:
$wpseo_active = FALSE;
$plugins = get_option( 'active_plugins', array() );

foreach ( $plugins as $plugin )
{
    if ( FALSE !== stripos( $plugin, 'wp-seo' )
    {
        $data = get_file_data( WP_PLUGIN_DIR . "$plugin" , array ( 'Author' ) );
        if ( 'Joost de Valk' === $data[0] )
        {
            $wpseo_active = TRUE;
        }
    }
}

if ( $wpseo_active )
{
    // do something
}
Y eso es todavía no está a salvo: nombres pueden ser cambiados..

Solución 2

Usted no puede comprobar para ver si una acción existe confiablemente. Porque es la única vez que existe la acción cuando se llama a do_action o alguien añade acciones. Así que la acción sólo existe cuando alguien agrega una acción que, o se llama a la acción.

Y si alguien agrega acciones, no garantiza en absoluto se llamará la acción. Un problema grande que pueden tener algunos desarrolladores plugin depende de la acción de wp_head, pero un mal construido tema, no llama a la acción de wp_head!.





Problemas relacionados

Lightbox emergente sobre la acción de add_to_cart WooCommerce

¿Cómo comprobar si existe un código corto?

Imprimir shortcode en gancho de acción personalizada no donde está ingresado el shortcode

¿Hay una acción que se llama cuando se restaura un post de la basura?

¿Qué filtro o acción gancho para cargar un código antes de que la plantilla comienza impresión en BuddyPress?

Gancho para fallar y exitoso inicio de sesión acciones

¿Por eso comprobar si la función no existe en functions.php?

Añadir acción masiva a wp admin\/users.php

Añadir acción condicional sólo cuando el gancho home.php en uso

¿WordPress tema acción Update?

woocommerce gancho publicar producto

ciclo de vida de acción

Source: Stack Exchange Inc; License: cc by-sa 3.0 Contacto / Contact