WordPress.org

Plugin Directory

Changeset 1796510


Ignore:
Timestamp:
01/03/18 14:50:25 (2 weeks ago)
Author:
norcross
Message:

adding functionality to convert post meta keys from other plugins

Location:
minimum-viable-sharing-meta
Files:
23 added
8 edited

Legend:

Unmodified
Added
Removed
  • minimum-viable-sharing-meta/trunk/CHANGES.md

    r1795465 r1796510  
    33 
    44#### Version 0.0.2 - 2018/01/01 
    5 * added character count warnings for titles and descriptions 
     5* added character count warnings for titles and descriptions. 
    66* introducted the `minshare_meta_use_default_tags` filter to use default values when tags for singular content has not been entered. The default is `false`. 
    77* added the `MINSHARE_META_POSTKEY` and `MINSHARE_META_OPTIONKEY` constants to use in the entire plugin. 
     8 
     9#### Version 0.0.3 - 2018/01/02 
     10* added metadata conversion for Yoast SEO and All In One SEO Pack. 
  • minimum-viable-sharing-meta/trunk/assets/css/minshare-meta-admin.css

    r1795465 r1796510  
    6666} 
    6767 
     68.minshare-meta-convert-wrap p { 
     69    margin-top: 0; 
     70} 
     71 
     72.minshare-meta-convert-wrap .minshare-meta-convert-buttons-wrap {} 
     73 
     74.minshare-meta-convert-wrap .minshare-meta-convert-buttons-wrap a { 
     75    margin: 0 10px 0 0; 
     76} 
     77 
    6878 
    6979span#footer-ghlink {} 
  • minimum-viable-sharing-meta/trunk/assets/css/minshare-meta-admin.min.css

    r1795465 r1796510  
    1 .minshare-meta-settings-page-wrap form table{max-width:880px}.minshare-meta-settings-page-wrap form .form-table th,.minshare-meta-table-wrap th{width:160px}.minshare-meta-data-input-wrap .field-character-count-wrap .current-count{font-weight:600;font-size:110%;color:#444}.minshare-meta-data-input-wrap .field-character-count-wrap .current-count.current-count-over{color:#a00}.minshare-meta-data-input-wrap .field-character-count-wrap .field-learn-more{margin-left:10px}.minshare-meta-data-input-wrap .field-textarea{min-height:90px}.minshare-meta-data-input-wrap input.upload-field{width:520px;display:inline-block;vertical-align:middle}.minshare-meta-data-input-wrap .upload-button{margin-left:6px;display:inline-block;vertical-align:middle}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item{width:100%;display:block;height:16px;margin-bottom:8px}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item:last-of-type{margin-bottom:0}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item input{display:inline-block;vertical-align:top;line-height:16px;margin:0}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item label{margin:0 0 0 8px;vertical-align:top;font-size:13px;line-height:16px}span#footer-ghlink a{font-weight:600} 
     1.minshare-meta-settings-page-wrap form table{max-width:880px}.minshare-meta-settings-page-wrap form .form-table th,.minshare-meta-table-wrap th{width:160px}.minshare-meta-data-input-wrap .field-character-count-wrap .current-count{font-weight:600;font-size:110%;color:#444}.minshare-meta-data-input-wrap .field-character-count-wrap .current-count.current-count-over{color:#a00}.minshare-meta-data-input-wrap .field-character-count-wrap .field-learn-more{margin-left:10px}.minshare-meta-data-input-wrap .field-textarea{min-height:90px}.minshare-meta-data-input-wrap input.upload-field{width:520px;display:inline-block;vertical-align:middle}.minshare-meta-data-input-wrap .upload-button{margin-left:6px;display:inline-block;vertical-align:middle}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item{width:100%;display:block;height:16px;margin-bottom:8px}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item:last-of-type{margin-bottom:0}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item input{display:inline-block;vertical-align:top;line-height:16px;margin:0}.minshare-meta-data-input-wrap .minshare-meta-setting-radio-item label{margin:0 0 0 8px;vertical-align:top;font-size:13px;line-height:16px}.minshare-meta-convert-wrap p{margin-top:0}.minshare-meta-convert-wrap .minshare-meta-convert-buttons-wrap a{margin:0 10px 0 0}span#footer-ghlink a{font-weight:600} 
  • minimum-viable-sharing-meta/trunk/includes/class-admin.php

    r1795465 r1796510  
    2020     */ 
    2121    public function init() { 
    22         add_action( 'admin_enqueue_scripts',        array( $this, 'load_admin_assets'       ),  10      ); 
    23         add_filter( 'admin_footer_text',            array( $this, 'admin_footer_text'            )           ); 
     22        add_action( 'admin_notices',                        array( $this, 'meta_convert_results'    )           ); 
     23        add_action( 'admin_init',                           array( $this, 'call_meta_conversion'    )           ); 
     24        add_action( 'admin_enqueue_scripts',                array( $this, 'load_admin_assets'       ),  10      ); 
     25        add_action( 'minshare_meta_after_settings_form',    array( $this, 'add_convert_options'     )           ); 
     26        add_filter( 'admin_footer_text',                    array( $this, 'admin_footer_text'       )           ); 
     27    } 
     28 
     29    /** 
     30     * Display the message based on our fetch result. 
     31     * 
     32     * @return void 
     33     */ 
     34    public function meta_convert_results() { 
     35 
     36        // Dont show it if we don't have the flag. 
     37        if ( empty( $_GET['minshare-meta-convert-success'] ) ) { 
     38            return; 
     39        } 
     40 
     41        // And handle the notice. 
     42        echo '<div class="notice notice-success is-dismissible">'; 
     43            echo '<p>' . esc_html__( 'Success! The existing meta keys have been converted.', 'minimum-viable-sharing-meta' ) . '</p>'; 
     44        echo '</div>'; 
     45 
     46        // And bail. 
     47        return; 
     48    } 
     49 
     50    /** 
     51     * Run our actual meta conversion. 
     52     * 
     53     * @return 
     54     */ 
     55    public function call_meta_conversion() { 
     56 
     57        // Make sure we're on the correct page. 
     58        if ( empty( $_GET['minshare-meta-convert'] ) || empty( $_GET['page'] ) || 'minshare-meta-settings' !== esc_attr( $_GET['page'] ) ) { 
     59            return; 
     60        } 
     61 
     62        // Do our nonce check. ALWAYS A NONCE CHECK. 
     63        if ( empty( $_GET['minshare-meta-nonce'] ) || ! wp_verify_nonce( $_GET['minshare-meta-nonce'], 'minshare-meta-nonce' ) ) { 
     64            return; 
     65        } 
     66 
     67        // Set my source. 
     68        $source = ! empty( $_GET['minshare-meta-convert-source'] ) ? esc_attr( $_GET['minshare-meta-convert-source'] ) : ''; 
     69 
     70        // Handle checking the source. 
     71        if ( empty( $source ) || ! in_array( $source, minshare_meta()->plugin_convert_keys( true ) ) ) { 
     72            return; 
     73        } 
     74 
     75        // Run our conversion. 
     76        minshare_meta()->convert_post_meta( $source ); 
     77 
     78        // Create our link to trigger the conversion. 
     79        $link   = add_query_arg( 'minshare-meta-convert-success', 1, menu_page_url( 'minshare-meta-settings', false ) ); 
     80 
     81        // And redirect. 
     82        wp_redirect( $link ); 
     83        exit(); 
    2484    } 
    2585 
     
    69129 
    70130    /** 
     131     * Add the button to convert other plugins. 
     132     * 
     133     * @return void 
     134     */ 
     135    public function add_convert_options() { 
     136 
     137        // Bail if we have no keys to convert. 
     138        if ( ! minshare_meta()->plugin_convert_keys() ) { 
     139            return; 
     140        } 
     141 
     142        // Set the args. 
     143        $args   = array( 
     144            'minshare-meta-convert' => 1, 
     145            'minshare-meta-nonce'   => wp_create_nonce( 'minshare-meta-nonce' ), 
     146        ); 
     147 
     148        // Create our base link to trigger the conversion. 
     149        $base   = add_query_arg( $args, menu_page_url( 'minshare-meta-settings', false ) ); 
     150 
     151        // First add a clean line. 
     152        echo '<hr>'; 
     153 
     154        // Now a div to separate it all. 
     155        echo '<div class="minshare-meta-convert-wrap">'; 
     156 
     157            // Add a header and an intro. 
     158            echo '<h3>' . esc_html__( 'Convert Data', 'minimum-viable-sharing-meta' ) . '</h3>'; 
     159            echo '<p>' . esc_html__( 'Convert existing data from popular plugins like Yoast SEO and All In One. This will not delete any data from those plugins.', 'minimum-viable-sharing-meta' ) . '</p>'; 
     160 
     161            // Make our convert link buttons. 
     162            echo '<p class="minshare-meta-convert-buttons-wrap">'; 
     163 
     164            // Now loop the convert key data. 
     165            foreach ( minshare_meta()->plugin_convert_keys() as $key => $values ) { 
     166 
     167                // Create our link to include which one we wanna convert. 
     168                $link   = add_query_arg( 'minshare-meta-convert-source', $key, $base ); 
     169 
     170                // Set my label. 
     171                $label  = sprintf( __( 'Convert From <strong>%s</strong>', 'minimum-viable-sharing-meta' ), esc_attr( $values['name'] ) ); 
     172 
     173                // And echo out the button. 
     174                echo '<a class="button button-secondary minshare-meta-convert-button" href="' . esc_url( $link ) . '">' . $label . '</a>'; 
     175            } 
     176 
     177            // Close the paragraph. 
     178            echo '</p>'; 
     179 
     180        // Close our div. 
     181        echo '</div>'; 
     182    } 
     183 
     184    /** 
    71185     * Add attribution link to settings page. 
    72186     * 
  • minimum-viable-sharing-meta/trunk/includes/class-fields.php

    r1795465 r1796510  
    238238    public static function media_upload_field( $args = array(), $value, $echo = false ) { 
    239239 
    240         // preprint( $args, true ); 
    241  
    242240        // Set my default args. 
    243241        $base   = array( 
  • minimum-viable-sharing-meta/trunk/includes/class-settings.php

    r1795465 r1796510  
    9090    public static function view_default_settings() { 
    9191 
     92        // Fire the before action. 
     93        do_action( 'minshare_meta_before_settings_page' ); 
     94 
    9295        // Handle the form wrap. 
    9396        echo '<div class="wrap minshare-meta-data-input-wrap minshare-meta-settings-page-wrap">'; 
     
    98101            // The error handler. 
    99102            settings_errors(); 
     103 
     104            // Handle the before action on the form itself. 
     105            do_action( 'minshare_meta_before_settings_form' ); 
    100106 
    101107            // And the actual form. 
     
    111117                submit_button(); 
    112118 
     119                // Handle the after action inside the form itself. 
     120                do_action( 'minshare_meta_after_settings_submit' ); 
     121 
    113122            // Close the form. 
    114123            echo '</form>'; 
    115124 
     125            // Handle the after action for the form itself. 
     126            do_action( 'minshare_meta_after_settings_form' ); 
     127 
    116128        // Close the div. 
    117129        echo '</div>'; 
     130 
     131        // Fire the after action. 
     132        do_action( 'minshare_meta_after_settings_page' ); 
    118133    } 
    119134 
  • minimum-viable-sharing-meta/trunk/minimum-viable-sharing-meta.php

    r1795465 r1796510  
    44 * Plugin URI:  https://github.com/norcross/minimum-viable-sharing-meta 
    55 * Description: Just the minimum required meta tags to work. 
    6  * Version:     0.0.2 
     6 * Version:     0.0.3 
    77 * Author:      Andrew Norcross 
    88 * Author URI:  http://andrewnorcross.com 
     
    3939     * @var    string 
    4040     */ 
    41     private $version = '0.0.2'; 
     41    private $version = '0.0.3'; 
    4242 
    4343    /** 
     
    249249 
    250250    /** 
     251     * Handle our fancy meta key conversion. 
     252     * 
     253     * @param  string $source  The source plugin we want to convert. 
     254     * 
     255     * @return boolean 
     256     */ 
     257    public function convert_post_meta( $source = '', $allmeta = array() ) { 
     258 
     259        // Bail without a source. 
     260        if ( empty( $source ) ) { 
     261            return false; 
     262        } 
     263 
     264        // Fetch my items related to this source. 
     265        if ( false === $items = $this->plugin_convert_keys( 0, $source ) ) { 
     266            return false; 
     267        } 
     268 
     269        // Remove the name key. 
     270        unset( $items['name'] ); 
     271 
     272        // Call global DB class. 
     273        global $wpdb; 
     274 
     275        // Set our table. 
     276        $table  = $wpdb->postmeta; 
     277 
     278        // Confirm the table exists before running any updates. 
     279        if ( $wpdb->get_var( "SHOW TABLES LIKE '$table'" ) !== $table ) { 
     280            return; 
     281        } 
     282 
     283        // Now loop the items. 
     284        foreach ( $items as $type => $metakey ) { 
     285 
     286            // Prepare my query. 
     287            $query  = $wpdb->prepare(" 
     288                SELECT post_id 
     289                FROM $table 
     290                WHERE meta_key = %s", 
     291                esc_sql( $metakey ) 
     292            ); 
     293 
     294            // Run SQL query. 
     295            $theids = $wpdb->get_col( $query ); 
     296 
     297            // Bail if nothing comes back. 
     298            if ( empty( $theids ) ) { 
     299                continue; 
     300            } 
     301 
     302            // Loop my IDs. 
     303            foreach ( $theids as $id ) { 
     304 
     305                // Pull my value out. 
     306                $value  = get_post_meta( $id, $metakey, true ); 
     307 
     308                // And now add our ID'd array. 
     309                $allmeta[ $id ][ $type ] = $value; 
     310            } 
     311        } 
     312 
     313        // Bail with no meta data. 
     314        if ( empty( $allmeta ) ) { 
     315            return false; 
     316        } 
     317 
     318        // Now, one more loop and updating some meta. 
     319        foreach ( $allmeta as $post_id => $metadata ) { 
     320 
     321            // Sanitize our data. 
     322            $update = MinimumViableMeta_Helper::array_sanitize( $metadata ); 
     323 
     324            // Update the post meta. 
     325            update_post_meta( $post_id, MINSHARE_META_POSTKEY, $update ); 
     326        } 
     327    } 
     328 
     329    /** 
    251330     * Delete all the post meta related to the plugin. 
    252331     * 
     
    337416        // Include the action to send something else back. 
    338417        do_action( 'minshare_meta_max_field_length', $field ); 
     418    } 
     419 
     420    /** 
     421     * Set the keys from the plugins we wanna convert. 
     422     * 
     423     * @param  boolean $keys    Whether we want the array keys or everything. 
     424     * @param  string  $source  A single source. 
     425     * 
     426     * @return array 
     427     */ 
     428    public function plugin_convert_keys( $keys = false, $source = '' ) { 
     429 
     430        // Set my array of plugins and their keys. 
     431        $items  = array( 
     432            'yoast'     => array( 
     433                'name'  => __( 'Yoast SEO', 'minimum-viable-sharing-meta' ), 
     434                'title' => '_yoast_wpseo_title', 
     435                'desc'  => '_yoast_wpseo_metadesc', 
     436            ), 
     437            'aioseo'    => array( 
     438                'name'  => __( 'All In One SEO Pack', 'minimum-viable-sharing-meta' ), 
     439                'title' => '_aioseop_title', 
     440                'desc'  => '_aioseop_description', 
     441            ), 
     442        ); 
     443 
     444        // Return our setup. 
     445        $items  = apply_filters( 'minshare_meta_plugin_convert_keys', $items ); 
     446 
     447        // We requested a single source. 
     448        if ( ! empty( $source ) ) { 
     449            return isset( $items[ $source ] ) ? $items[ $source ] : false; 
     450        } 
     451 
     452        // Return the keys, or the entire thing. 
     453        return ! empty( $keys ) ? array_keys( $items ) : $items; 
    339454    } 
    340455 
  • minimum-viable-sharing-meta/trunk/readme.txt

    r1795465 r1796510  
    66Requires at least: 4.9 
    77Tested up to: 4.9 
    8 Stable tag: 0.0.2 
     8Stable tag: 0.0.3 
    99Requires PHP: 5.6 
    1010License: MIT 
     
    6565 
    6666 
     67= 0.0.3 - 2018/01/02 = 
     68* added metadata conversion for Yoast SEO and All In One SEO Pack. 
     69 
    6770== Upgrade Notice == 
Note: See TracChangeset for help on using the changeset viewer.