используем add_filter('auth_redirect_scheme','stop_redirect',9999); //проверяем если пользователь не авторизован, отдаем, к примеру, 404 страницу при обращении на .../wp-admin или .../admin вместо редиректа на страницу авторизации
if(is_multisite()&&!get_option('users_can_register')){add_action('init','функция');}
add_filter('site_url','функция',10,3);//подменяем wp-login на свой. Аналогично с wp-comments-post
add_filter('mod_rewrite_rules','функция'); //рулим через .htaccess Дефолтный wp-login, на свою кастомную после смыны. Дефолтный wp-login блочим тут же, либо через настройки веб сервера, например Nginx. Аналогично с wp-comments-post
location ~ (xmlrpc|wp-comments-post|wp-config|wp-config-sample|wp-login)\.php$ {
error_page 404 /my_super_404.html;
return 404;
}
add_action('register_form','функция',10,1);
add_action('login_form','функция');
add_action('login_enqueue_scripts','функция');
add_filter('wp_authenticate_user','функция',10,2);
add_filter('registration_errors','функция');
add_filter('login_headerurl','функция');
add_filter('login_headertext','функция');
add_action('login_footer','функция');
add_filter('login_redirect','функция');
add_action('wp_logout','функция');
add_action('comment_form','функция');
add_action('pre_comment_on_post','функция',0);
add_action('init','функция');
add_filter('xmlrpc_enabled','__return_false');
add_filter('the_generator','__return_empty_string');
remove_action('wp_head','rsd_link');//Используется различными блог-клиентами или веб-сервисами для публикации/изменения записей в блоге.
remove_action('wp_head','feed_links',2);
remove_action('wp_head','feed_links_extra',3);
// remove_action('wp_head','rel_canonical');//Убирает канонические линки
remove_action('wp_head','wlwmanifest_link');// Используется блог-клиентами, а вернее лишь одним из них - Windows Live Writer. Не используете WLW - удаляйте.
remove_action('wp_head','wp_resource_hints',2);//dns-prefetch
remove_action('wp_head','wp_shortlink_wp_head');// Убирает короткую ссылку к текущей странице
remove_action('wp_head','wp_oembed_add_discovery_links');//alternate - application/json+oembed и alternate - text/xml+oembed
remove_action('wp_head','rest_output_link_wp_head',10,0);//alternate - application/json и rel api.w.org
remove_action('template_redirect','rest_output_link_header',11,0);//че-то с рест апи
$vab_prot=!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])?$_SERVER['HTTP_X_FORWARDED_PROTO']:'http';
define('WP_CONTENT_FOLDERNAME','my-super-content');
define('WP_CONTENT_DIR',ABSPATH . WP_CONTENT_FOLDERNAME) ;
define('WP_SITEURL',$vab_prot.'://'.$_SERVER['HTTP_HOST'].'/');
define('WP_CONTENT_URL',WP_SITEURL . WP_CONTENT_FOLDERNAME);
add_filter('body_class','функция');
Как ограничить число регистраций?
И чтобы боты тоже не могли региться. А то боты могут обходить запрет на регистрацию даже при убранной галке в настройках Общие.
Есть нативная функция wp_upload_dir() для получения массива данных о папке с медиафайлами
$VAB_UPLOAD = wp_upload_dir();
if ( ! defined( 'VAB_UPLOAD_DIR' ) ) {
define( 'VAB_UPLOAD_DIR', $VAB_UPLOAD['basedir'] );
}
if ( ! defined( 'VAB_UPLOAD_URL' ) ) {
define( 'VAB_UPLOAD_URL', $VAB_UPLOAD['baseurl'] );
}
ECHO VAB_UPLOAD_DIR;
ECHO '<BR>';
ECHO VAB_UPLOAD_URL;
Каким образом можно реализовать такой же сайдбар?
$arg=array('title_li'=>'','echo'=>0);
echo wp_list_pages($arg);
//даже так выводит дочерние wp_list_pages();
А именно как вывести страницы у которых есть дочерние страницы?
Подскажите как сделать так, что бы поля ozon_ru_link и apteka_ru_link выводились только при условии что они заполнены ссылками в админке
$value = get_field( 'text_field' );
if( $value ) {
echo $value;
}
else {
echo 'empty';
}
....
if ( 'проверяем заполнено ли поле apteka_ru_link' ) { ?>
<div class="knopka1">
<a rel="nofollow" target="_blank" class="pokypka" href="{{ get_field('apteka_ru_link') }}">
<img class="knopochka" src="/wp-content/uploads/2022/04/Без-имени-2.png">
</a>
</div>
<?php }
if ( 'проверяем заполнено ли поле ozon_ru_link' ) { ?>
<div class="knopka2">
<a rel="nofollow" target="_blank" class="pokypka" href="{{ get_field('ozon_ru_link') }}">
<img class="knopochka" src="/wp-content/uploads/2022/04/Без-имени-3.png">
</a>
</div>
<?php }
add_action('admin_enqueue_scripts','load_admin_styles_scripts');
if(!function_exists('load_admin_styles_scripts')){
function load_admin_styles_scripts(){
wp_enqueue_style('wp-color-picker');
wp_enqueue_script('wp-color-picker');
}}
if(!function_exists('admin_footer_script')){
function admin_footer_script(){?>
<script type="text/javascript">
jQuery(document).ready(function($){
$('.wpColorChoose').wpColorPicker();});
</script><?php }}
add_action('admin_footer','admin_footer_script',99);
if(!function_exists('VAB_user_fields')){
function VAB_user_fields($user){
global $pagenow;
if($pagenow=='profile.php'||$pagenow=='user-edit.php'){
wp_nonce_field('VAB_mode_ufields_nonce','VAB_ufields_nonce');
$id=$user->ID;
$color=get_the_author_meta('myColor',$id);//получаем мета данные с ключом myColor для текущего пользователя
echo'<input name="myColor" id="color" type="text" class="wpColorChoose" value="'.$color.'">';
}}}
add_action('show_user_profile','VAB_user_fields');
add_action('edit_user_profile','VAB_user_fields');
if(!function_exists('save_VAB_user_fields')){
function save_VAB_user_fields($user_id){
$nonce=filter_input(INPUT_POST,'VAB_ufields_nonce',FILTER_SANITIZE_STRING);
if(!$nonce){return;}//проверяем наши nonce поля
if(!wp_verify_nonce($nonce,'VAB_mode_ufields_nonce')){return;}//проверяем наши nonce поля
$myColor=get_the_author_meta('myColor',$user_id);//получаем мета данные с ключом myColor для текущего пользователя
$newColor=$_POST['myColor'];//проверяем передачу пост данных... можно доп. обработать фильтрами в зависимости от типа данных
if(empty($newColor)){//если данные пустые удалим мета
delete_user_meta($user_id,'myColor');
}else{//иначе сохраним в мета
update_user_meta($user_id,'myColor',$newColor);}}}
add_action('personal_options_update','save_VAB_user_fields');
add_action('edit_user_profile_update','save_VAB_user_fields');
if(!function_exists('VAB_user_fields2')){
function VAB_user_fields2($user){
global $pagenow;
if($pagenow=='profile.php'||$pagenow=='user-edit.php'){
wp_nonce_field('VAB_mode_ufields_nonce','VAB_ufields_nonce');
$id=$user->ID;
$uMeta=get_the_author_meta('uMeta',$id);//получаем мета данные с ключом myColor для текущего пользователя
$myCheckbox=isset($uMeta['myCheckbox'])?'checked="checked"':'';
$myColor=isset($uMeta['myColor'])?$uMeta['myColor']:'';
echo'<input name="uMeta[myCheckbox]" id="myCheckbox" type="checkbox" '.$myCheckbox.'>';
echo'<br><br>';
echo'<input name="uMeta[myColor]" id="myColor" type="text" class="wpColorChoose" value="'.$myColor.'">';
}}}
add_action('show_user_profile','VAB_user_fields2');
add_action('edit_user_profile','VAB_user_fields2');
if(!function_exists('save_VAB_user_fields2')){
function save_VAB_user_fields2($user_id){
$nonce=filter_input(INPUT_POST,'VAB_ufields_nonce',FILTER_SANITIZE_STRING);
if(!$nonce){return;}//проверяем наши nonce поля
if(!wp_verify_nonce($nonce,'VAB_mode_ufields_nonce')){return;}//проверяем наши nonce поля
$uMeta=get_the_author_meta('uMeta',$user_id);//получаем мета данные с ключом myColor для текущего пользователя
$newuMeta=$_POST['uMeta'];//проверяем передачу пост данных... можно доп. обработать фильтрами в зависимости от типа данных
if(empty($newuMeta['myCheckbox'])&&empty($newuMeta['myColor'])){//если данные пустые удалим мета
delete_user_meta($user_id,'uMeta');
}else{//иначе сохраним в мета
update_user_meta($user_id,'uMeta',$newuMeta);}}}
add_action('personal_options_update','save_VAB_user_fields2');
add_action('edit_user_profile_update','save_VAB_user_fields2');
<?php
/**
* The searchform.php template.
*
* Used any time that get_search_form() is called.
*
* @link https://developer.wordpress.org/reference/functions/wp_unique_id/
* @link https://developer.wordpress.org/reference/functions/get_search_form/
*
* @package WordPress
* @subpackage Twenty_Twenty_One
* @since Twenty Twenty-One 1.0
*/
/*
* Generate a unique ID for each form and a string containing an aria-label
* if one was passed to get_search_form() in the args array.
*/
$twentytwentyone_unique_id = wp_unique_id( 'search-form-' );
$twentytwentyone_aria_label = ! empty( $args['aria_label'] ) ? 'aria-label="' . esc_attr( $args['aria_label'] ) . '"' : '';
?>
<form role="search" <?php echo $twentytwentyone_aria_label; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped above. ?> method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<label for="<?php echo esc_attr( $twentytwentyone_unique_id ); ?>"><?php _e( 'Search…', 'twentytwentyone' ); // phpcs:ignore: WordPress.Security.EscapeOutput.UnsafePrintingFunction -- core trusts translations ?></label>
<input type="search" id="<?php echo esc_attr( $twentytwentyone_unique_id ); ?>" class="search-field" value="<?php echo get_search_query(); ?>" name="s" />
<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'twentytwentyone' ); ?>" />
</form>
<?php
if(!defined('ABSPATH')){exit;}
$unique_id=wp_unique_id('search-form-');
...
<input type="search" name="s" class="s" id="<?php echo esc_attr($unique_id);?>" title="<?php printf(esc_attr__('Поле для ввода текста','VAB'));?>" placeholder="<?php echo esc_attr__('Текст поиска','VAB'); ?>" value="<?php echo get_search_query();?>"/>
...
add_filter( 'show_admin_bar', '__return_false' );
echo '<a href="'. get_site_url() . '/wp-admin/profile.php">Профиль</a>';
add_filter('wp_nav_menu_items','add_menu_link',10,2);
if(!function_exists('add_menu_link')){function add_menu_link($items,$args){
...
<div class="entry-content pad_min">
<div class="slider_page">
<?php if ( have_rows( 'acf_slider' ) ) : ?>
<?php while ( have_rows( 'acf_slider' ) ) : the_row(); ?>
<div class="slider_page_slid">
<?php $acf_slid = get_sub_field( 'acf_slid' ); ?>
<?php if ( $acf_slid ) { ?>
<a href="<?php echo $acf_slid['url']; ?>"><img src="<?php echo $acf_slid['url']; ?>" alt="<?php echo $acf_slid['alt']; ?>" /></a>
<?php } ?>
</div>
<?php endwhile; ?>
<?php else : ?>
<?php // no rows found ?>
<?php endif; ?>
</div>
</div>
и не мог просматривать страницы предназначенные для других пользователей