web-dev-qa-db-fra.com

Quoi qu'il en soit, pour éditer la barre de titre de Wordpress Widgets dans la zone d'administration?

Je fournis un moyen pour les widgets mobiles et les widgets de bureau dans tous les widgets personnalisés que je crée. Je pense donc que ce serait une bonne idée d'indiquer si un widget est mobile/desktop dans le titre de la zone des widgets dans le backend afin de aider à rendre cette section plus conviviale.

Existe-t-il un filtre qui peut être utilisé pour charger une image dans la barre de titre des widgets (à gauche du titre du widget), pour inclure une icône de mobile/desktop pour pouvoir identifier quels widgets actifs sont desktop et quels widgets actifs sont mobile, sans avoir à ouvrir le widget pour voir dans les options de celui-ci?

Existe-t-il un point d’accès quelque part dans wordpress pour capturer cela uniquement dans la page admin widgets.php du backend? Voudrais utiliser le crochet php pour quand la page se charge. Vous utilisez déjà jQuery lorsque l'option change de poste de travail à poste de travail, et inversement. C'est le chargement initial de la page des widgets qui m'a amené à le faire.

Possible?

Exemple ci-dessous, si possible faire sur la page widgets.php initiale, chargement facile depuis le fichier de classe WP_Widgets étendu et étendu? Ou filtres, actions, etc ...

enter image description here

J'ai donc essayé de procéder comme suit dans la classe Widget qui étend WP_Widget:

function __construct() {

        parent::__construct(
            'social_media_widget',
            __('Social Media Widget', 'mydomain')
        );

        add_filter('dynamic_sidebar_params', array($this, 'my_sidebar_params'), 10, 1);

    }

    function my_sidebar_params($params) {

        $sidebar_id = $params[0]['id'];

        if (is_admin() && $params[0]['widget_name'] == 'Social Media Widget')
        {
            $_widget = get_option('widget_social_media_widget');

            if (!empty($_widget) && isset($_widget[$params[1]['number']]))
            {
                // $platform is being set in here as "desktop" because if I do a var_dump, it gives me "desktop", however, the image is not showing in the titlebar using before_title below... why?
                $platform = isset($_widget[$params[1]['number']]['platform']) ? $_widget[$params[1]['number']]['platform'] : '';
            }

            if (!empty($platform))
            {
                $params[0]['before_title'] = '<img src="' . get_stylesheet_directory_uri() . '/img/' . $platform . '-icon.png" alt="' . $platform . ' menu" class="menu-icon ' . $platform . '-icon" />';
            }
        }
    return $params;
}

Donc, $ plate-forme est la valeur correcte à présent, mais l'image n'est pas jointe avant le titre dans la barre de titre de la zone des widgets d'administration. Je ne sais donc pas pourquoi elle ne s'affiche pas ... Des idées?

3
Solomon Closson

Je crois que vous recherchez $params = apply_filters( 'dynamic_sidebar_params', $params ); (regardez ici: https://github.com/WordPress/WordPress/blob/master/wp-includes/widgets.php#L706 ).

Maintenant, ce filtre évaluera à la fois les parties avant et arrière. afin de répondre à votre question, vous pouvez envelopper votre filtre dans une vérification if( is_admin() ){ // Do icons }.

Mieux encore, vous pouvez définir ceci au niveau de l'enregistrement avec votre fonction register_sidebar( $args ). Départ Ligne 236 pour la définition de la fonction et Ligne 250 pour l'argument réel dont vous auriez besoin pour personnaliser conditionnellement. Quelque chose comme ça

$before_title = is_admin() ? '<span class="custom-icon"></span><h2 class="widgettitle">' : '<h2 class="widgettitle">';

$args = array(
  // ... your custom args definition
  'before_title' => $before_title,
);

register_sidebar( $args );

UPDATE

Après avoir approfondi le code, ma réponse ne correspond pas à votre besoin pour plusieurs raisons.

  • Les titres de widget sont en HTML échappé, donc aucune balise ne peut être rendue
  • Un filtre existe widget_title pour remplacer le comportement d'échappement HTML, mais il n'est pas appliqué à la zone d'administration , nous ne pouvons donc pas modifier ce comportement pour votre cas d'utilisation car il est déjà échangé lors de son impression sur la ligne 229
  • Donc, la seule solution possible ici est de revenir à jQuery/CSS pour appliquer vos glyphes souhaités
4
bynicolas