license_is_valid() ) { return; } } $service_banners = array( array( 'url' => 'https://yoast.com/hire-us/website-review/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=website-review-banner', 'img' => 'banner-website-review.png', 'alt' => 'Website Review banner', ), ); $plugin_banners = array( array( 'url' => 'https://yoast.com/wordpress/plugins/seo-premium/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=premium-seo-banner', 'img' => 'banner-premium-seo.png', 'alt' => 'Banner WordPress SEO Premium', ), ); if ( ! class_exists( 'wpseo_Video_Sitemap' ) ) { $plugin_banners[] = array( 'url' => 'https://yoast.com/wordpress/plugins/video-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=video-seo-banner', 'img' => 'banner-video-seo.png', 'alt' => 'Banner WordPress SEO Video SEO extension', ); } if ( class_exists( 'Woocommerce' ) && ! class_exists( 'Yoast_WooCommerce_SEO' ) ) { $plugin_banners[] = array( 'url' => 'https://yoast.com/wordpress/plugins/yoast-woocommerce-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=woocommerce-seo-banner', 'img' => 'banner-woocommerce-seo.png', 'alt' => 'Banner WooCommerce SEO plugin', ); } if ( ! defined( 'WPSEO_LOCAL_VERSION' ) ) { $plugin_banners[] = array( 'url' => 'https://yoast.com/wordpress/plugins/local-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=local-seo-banner', 'img' => 'banner-local-seo.png', 'alt' => 'Banner Local SEO plugin', ); } if ( ! class_exists( 'WPSEO_News' ) ) { $plugin_banners[] = array( 'url' => 'https://yoast.com/wordpress/plugins/news-seo/#utm_source=wordpress-seo-config&utm_medium=banner&utm_campaign=news-seo-banner', 'img' => 'banner-news-seo.png', 'alt' => 'Banner News SEO', ); } shuffle( $service_banners ); shuffle( $plugin_banners ); ?>

'; settings_fields( $option ); } $this->currentoption = $optionshort; } /** * Generates the footer for admin pages * * @param bool $submit Whether or not a submit button and form end tag should be shown. * @param bool $show_sidebar Whether or not to show the banner sidebar - used by premium plugins to disable it */ function admin_footer( $submit = true, $show_sidebar = true ) { if ( $submit ) { submit_button(); echo ' '; } do_action( 'wpseo_admin_footer' ); echo '
'; if ( $show_sidebar ) { $this->admin_sidebar(); } echo '
'; /* Add the current settings array to the page for debugging purposes, but not for a limited set of pages were it wouldn't make sense */ $excluded = array( 'wpseo_import', 'wpseo_files', 'bulk_title_editor_page', 'bulk_description_editor_page', ); $page = WPSEO_Utils::filter_input( INPUT_GET, 'page' ); if ( ( WP_DEBUG === true || ( defined( 'WPSEO_DEBUG' ) && WPSEO_DEBUG === true ) ) && ! in_array( $page, $excluded, true ) ) { $xdebug = ( extension_loaded( 'xdebug' ) ? true : false ); echo '

' . __( 'Debug Information', 'wordpress-seo' ) . '

' . esc_html( __( 'Current option:', 'wordpress-seo' ) ) . ' ' . esc_html( $this->currentoption ) . '

' . ( ( $xdebug ) ? '' : '
' );
			var_dump( $this->get_option( $this->currentoption ) );
			echo '
					' . ( ( $xdebug ) ? '' : '
' ) . '
'; } echo '
'; } /** * Deletes all post meta values with a given meta key from the database * * @todo [JRF => whomever] This method does not seem to be used anywhere. Double-check before removal. * * @param string $meta_key Key to delete all meta values for. */ /*function delete_meta( $meta_key ) { global $wpdb; $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key ) ); }*/ /** * Exports the current site's WP SEO settings. * * @param bool $include_taxonomy Whether to include the taxonomy metadata the plugin creates. * * @return bool|string $return False when failed, the URL to the export file when succeeded. */ function export_settings( $include_taxonomy ) { $content = '; ' . __( 'This is a settings export file for the WordPress SEO plugin by Yoast.com', 'wordpress-seo' ) . " - https://yoast.com/wordpress/plugins/seo/ \r\n"; $optarr = WPSEO_Options::get_option_names(); foreach ( $optarr as $optgroup ) { $content .= "\n" . '[' . $optgroup . ']' . "\n"; $options = get_option( $optgroup ); if ( ! is_array( $options ) ) { continue; } foreach ( $options as $key => $elem ) { if ( is_array( $elem ) ) { $elm_count = count( $elem ); for ( $i = 0; $i < $elm_count; $i ++ ) { $content .= $key . '[] = "' . $elem[ $i ] . "\"\n"; } } elseif ( is_string( $elem ) && $elem == '' ) { $content .= $key . " = \n"; } elseif ( is_bool( $elem ) ) { $content .= $key . ' = "' . ( ( $elem === true ) ? 'on' : 'off' ) . "\"\n"; } else { $content .= $key . ' = "' . $elem . "\"\n"; } } } if ( $include_taxonomy ) { $content .= "\r\n\r\n[wpseo_taxonomy_meta]\r\n"; $content .= 'wpseo_taxonomy_meta = "' . urlencode( json_encode( get_option( 'wpseo_taxonomy_meta' ) ) ) . '"'; } $dir = wp_upload_dir(); if ( ! $handle = fopen( $dir['path'] . '/settings.ini', 'w' ) ) { die(); } if ( ! fwrite( $handle, $content ) ) { die(); } fclose( $handle ); chdir( $dir['path'] ); $zip = new PclZip( './settings.zip' ); if ( $zip->create( './settings.ini' ) == 0 ) { return false; } return $dir['url'] . '/settings.zip'; } /** * Loads the required styles for the config page. */ function config_page_styles() { wp_enqueue_style( 'dashboard' ); wp_enqueue_style( 'thickbox' ); wp_enqueue_style( 'global' ); wp_enqueue_style( 'wp-admin' ); wp_enqueue_style( 'yoast-admin-css', plugins_url( 'css/yst_plugin_tools' . WPSEO_CSSJS_SUFFIX . '.css', WPSEO_FILE ), array(), WPSEO_VERSION ); if ( is_rtl() ) { wp_enqueue_style( 'wpseo-rtl', plugins_url( 'css/wpseo-rtl' . WPSEO_CSSJS_SUFFIX . '.css', WPSEO_FILE ), array(), WPSEO_VERSION ); } } /** * Loads the required scripts for the config page. */ function config_page_scripts() { wp_enqueue_script( 'wpseo-admin-script', plugins_url( 'js/wp-seo-admin' . WPSEO_CSSJS_SUFFIX . '.js', WPSEO_FILE ), array( 'jquery', 'jquery-ui-core', ), WPSEO_VERSION, true ); wp_enqueue_script( 'dashboard' ); wp_enqueue_script( 'thickbox' ); $page = WPSEO_Utils::filter_input( INPUT_GET, 'page' ); if ( 'wpseo_social' === $page ) { wp_enqueue_media(); wp_enqueue_script( 'wpseo-admin-media', plugins_url( 'js/wp-seo-admin-media' . WPSEO_CSSJS_SUFFIX . '.js', WPSEO_FILE ), array( 'jquery', 'jquery-ui-core', ), WPSEO_VERSION, true ); wp_localize_script( 'wpseo-admin-media', 'wpseoMediaL10n', $this->localize_media_script() ); } if ( 'wpseo_bulk-editor' === $page ) { wp_enqueue_script( 'wpseo-bulk-editor', plugins_url( 'js/wp-seo-bulk-editor' . WPSEO_CSSJS_SUFFIX . '.js', WPSEO_FILE ), array( 'jquery' ), WPSEO_VERSION, true ); } } /** * Pass some variables to js for upload module. * * @return array */ public function localize_media_script() { return array( 'choose_image' => __( 'Use Image', 'wordpress-seo' ), ); } /** * Retrieve options based on whether we're on multisite or not. * * @since 1.2.4 * * @param string $option The option to retrieve. * * @return array */ function get_option( $option ) { if ( is_network_admin() ) { return get_site_option( $option ); } else { return get_option( $option ); } } /** * Create a Checkbox input field. * * @param string $var The variable within the option to create the checkbox for. * @param string $label The label to show for the variable. * @param bool $label_left Whether the label should be left (true) or right (false). * @param string $option The option the variable belongs to. * * @return string */ function checkbox( $var, $label, $label_left = false, $option = '' ) { if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); if ( ! isset( $options[ $var ] ) ) { $options[ $var ] = false; } if ( $options[ $var ] === true ) { $options[ $var ] = 'on'; } if ( $label_left !== false ) { if ( ! empty( $label_left ) ) { $label_left .= ':'; } $output_label = ''; $class = 'checkbox'; } else { $output_label = ''; $class = 'checkbox double'; } $output_input = ''; if ( $label_left !== false ) { $output = $output_label . $output_input . ''; } else { $output = $output_input . $output_label; } return $output . '
'; } /** * Create a Text input field. * * @param string $var The variable within the option to create the text input field for. * @param string $label The label to show for the variable. * @param string $option The option the variable belongs to. * * @return string */ function textinput( $var, $label, $option = '' ) { if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); $val = ( isset( $options[ $var ] ) ) ? $options[ $var ] : ''; return '' . '
'; } /** * Create a textarea. * * @param string $var The variable within the option to create the textarea for. * @param string $label The label to show for the variable. * @param string $option The option the variable belongs to. * @param string $class The CSS class to assign to the textarea. * * @return string */ function textarea( $var, $label, $option = '', $class = '' ) { if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); $val = ( isset( $options[ $var ] ) ) ? $options[ $var ] : ''; return '' . '
'; } /** * Create a hidden input field. * * @param string $var The variable within the option to create the hidden input for. * @param string $option The option the variable belongs to. * * @return string */ function hidden( $var, $option = '' ) { if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); $val = ( isset( $options[ $var ] ) ) ? $options[ $var ] : ''; if ( is_bool( $val ) ) { $val = ( $val === true ) ? 'true' : 'false'; } return ''; } /** * Create a Select Box. * * @param string $var The variable within the option to create the select for. * @param string $label The label to show for the variable. * @param array $values The select options to choose from. * @param string $option The option the variable belongs to. * * @return string */ function select( $var, $label, $values, $option = '' ) { if ( ! is_array( $values ) || $values === array() ) { return ''; } if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); $val = ( isset( $options[ $var ] ) ) ? $options[ $var ] : ''; $output = ''; $output .= ''; return $output . '
'; } /** * Create a File upload field. * * @param string $var The variable within the option to create the file upload field for. * @param string $label The label to show for the variable. * @param string $option The option the variable belongs to. * * @return string */ function file_upload( $var, $label, $option = '' ) { if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); $val = ''; if ( isset( $options[ $var ] ) && is_array( $options[ $var ] ) ) { $val = $options[ $var ]['url']; } $var_esc = esc_attr( $var ); $output = ''; $output .= ''; // Need to save separate array items in hidden inputs, because empty file inputs type will be deleted by settings API. if ( ! empty( $options[ $var ] ) ) { $output .= ''; $output .= ''; $output .= ''; } $output .= '
'; return $output; } /** * Media input * * @param string $var * @param string $label * @param string $option * * @return string */ function media_input( $var, $label, $option = '' ) { if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); $val = ''; if ( isset( $options[ $var ] ) ) { $val = $options[ $var ]; } $var_esc = esc_attr( $var ); $output = ''; $output .= ''; $output .= ''; $output .= '
'; return $output; } /** * Create a Radio input field. * * @param string $var The variable within the option to create the file upload field for. * @param array $values The radio options to choose from. * @param string $label The label to show for the variable. * @param string $option The option the variable belongs to. * * @return string */ function radio( $var, $values, $label, $option = '' ) { if ( ! is_array( $values ) || $values === array() ) { return ''; } if ( empty( $option ) ) { $option = $this->currentoption; } $options = $this->get_option( $option ); if ( ! isset( $options[ $var ] ) ) { $options[ $var ] = false; } $var_esc = esc_attr( $var ); $output = '
'; if ( is_string( $label ) && $label !== '' ) { $output .= ''; } foreach ( $values as $key => $value ) { $key_esc = esc_attr( $key ); $output .= ' '; } $output .= '
'; $output .= '

'; return $output; } /** * Create a postbox widget. * * @param string $id ID of the postbox. * @param string $title Title of the postbox. * @param string $content Content of the postbox. */ function postbox( $id, $title, $content ) { ?>

'; foreach ( $rows as $row ) { $content .= ''; if ( isset( $row['id'] ) && $row['id'] != '' ) { $content .= ''; } else { $content .= esc_html( $row['label'] ); } if ( isset( $row['desc'] ) && $row['desc'] != '' ) { $content .= '
' . esc_html( $row['desc'] ) . ''; } $content .= ''; $content .= $row['content']; $content .= ''; } $content .= ''; return $content; } /********************** DEPRECATED METHODS **********************/ /** * Resets the site to the default WordPress SEO settings and runs a title test to check * whether force rewrite needs to be on. * * @deprecated 1.5.0 * @deprecated use WPSEO_Options::reset() * @see WPSEO_Options::reset() */ function reset_defaults() { _deprecated_function( __METHOD__, 'WPSEO 1.5.0', 'WPSEO_Options::reset()' ); WPSEO_Options::reset(); } } /* End of class */