it-swarm.com.de

Gibt es einen Haken, wenn Sie Themen wechseln?

Ich habe ein Plugin erstellt, bin aber auf einen Fehler gestoßen, den ich nicht wirklich lösen kann.

Wenn Sie mein Plugin aktivieren, erstellt es eine Datei im aktiven Themenverzeichnis und löscht diese Datei, wenn Sie es deaktivieren.

Das Problem ist, wenn Sie das Plugin aktivieren und dann das Thema wechseln, sind die Dateien nicht im Verzeichnis des neuen Themas vorhanden. Gibt es eine Codezeile, die ich in meine Plugins-Funktionsdatei einfügen kann, um das Plugin zu deaktivieren, bevor das Thema gewechselt wird, und um es dann zu aktivieren, nachdem das neue Thema aktiviert wurde?

Danke, das ist eine großartige Community, also weiß ich, dass ich eine großartige Antwort bekomme. :)

5
Jared

Es gibt eine Aktion 'switch_theme', die unmittelbar nach dem Wechsel des Themas ausgeführt wird.

function my_on_switch_theme($new_theme) {
    $current_themes = wp_get_themes(); /* Fixed deprecated function */
    $new_theme_info = $current_themes[$new_theme];
    /*
    $new_theme_info should now be an associative array with the following:
    $new_them_info['Title'];
    $new_them_info['Version'];
    $new_them_info['Parent Theme'];
    $new_them_info['Template Dir'];
    $new_them_info['Stylesheet Dir'];
    $new_them_info['Template'];
    $new_them_info['Stylesheet'];
    $new_them_info['Screenshot'];
    $new_them_info['Description'];
    $new_them_info['Author'];
    $new_them_info['Tags'];
    $new_them_info['Theme Root'];
    $new_them_info['Theme Root URI'];
    ...so do what you need from this.
    */
}
add_action('switch_theme', 'my_on_switch_theme');
7
prettyboymp

In WordPress 1.5 und höher heißt die Aktion, nach der Sie suchen, switch theme .

Sie können es in der Quelle in theme.php sehen.

2
editor

Ich hatte das gleiche Problem und um das alte Thema anzugehen, verwenden wir get_option('theme_switched'). Diese Option enthält den Wert des zuletzt aktiven Themas.

Ein fast vollständiges Beispiel (nur der Deaktivierungshaken fehlt):

register_activation_hook( __FILE__, 'make_copy_wpse_7518' );

add_action( 'switch_theme', 'switching_theme_wpse_7518', 10, 2 );

/**
 * Theme switch
 */
function switching_theme_wpse_7518( $new_name, $new_theme )
{
    # Remove template from old theme
    $old_theme = get_option( 'theme_switched' );
    // I thought that get_theme_root would return the path to the old theme, but apparently not, hence the second $old_theme
    $template_path = get_theme_root( $old_theme ) . "/$old_theme/plugin-template-file.php";    
    if( file_exists( $template_path ) )
        unlink( $template_path );

    # Copy template to newly activated theme    
    make_copy_wpse_7518();
}

/**
 * Copy function, called on plugin activation and theme swap
 */
function make_copy_wpse_7518()
{
    $source = dirname( __FILE__ ) . "/includes/plugin-template-file.php";
    $destination = get_stylesheet_directory() . "/plugin-template-file.php";
    copy_page_template_wpse_7518( $source, $destination );
}

/**
 * Does the actual copy from plugin to template directory
 * From https://github.com/tommcfarlin/page-template-example/
 */
function copy_page_template_wpse_7518( $source, $destination )  
{
    // Check if template already exists. If so don't copy it; otherwise, copy if
    if( ! file_exists( $destination ) ) 
    {
        // Create an empty version of the file
        touch( $destination );

        // Read the source file starting from the beginning of the file
        if( null != ( $handle = @fopen( $source, 'r' ) ) ) 
        {
            // Read the contents of the file into a string. 
            // Read up to the length of the source file
            if( null != ( $content = fread( $handle, filesize( $source ) ) ) ) 
            {
                // Relinquish the resource
                fclose( $handle );
            } 
        } 

        // Now open the file for reading and writing
        if( null != ( $handle = @fopen( $destination, 'r+' ) ) ) 
        {
            // Attempt to write the contents of the string
            if( null != fwrite( $handle, $content, strlen( $content ) ) ) 
            {
                // Relinquish the resource
                fclose( $handle );
            } 
        } 
    } 
}
1
brasofilo