2014-09-10 4 views
-1

Я использую этот код для отправки переменной php из сообщения Wordpress в функцию, как только нажимается кнопка, которая удалит тег «test» из сообщения. Функция для удаления тега работает нормально, пока я использую его в functions.php и без ajax.ajax handler для удаления тега

jQuery(document).ready(function() { 
    setTimeout(function() { 
     jQuery(".taguntagclick").trigger('click'); 
    }, 10); 
}); 

jQuery(document).ready(function() { 
    jQuery('.json_click_handler').click(function() { 
     var c = jQuery(this).attr('rel'); 
     var d = jQuery(this).attr('alt'); 
     jQuery.ajax({ 
      url: 'wp-content/themes/kleinraumv4_ap/projekt-getter.php', 
      data: { 
       'selection': c, 
       'pid': d, 
       'tag': 'test' 
      }, 
      dataType: 'html', 
      success: function() { 
       alert('success'); 
      }, 
      error: function(errorThrown) { 
       alert('error'); 
       console.log(errorThrown); 
      } 
     }); 
    }); 
});  

Как только я обновить страницу я получаю «успеха» -message, хотя я даже нету щелкнул:

<a href="#" rel="beard" class="json_click_handler taguntagclick" alt="<?php echo $attachment->ID; ?>"> 

и он также удалить это не распространяется тег.

вот функцию:

include("../../../wp-load.php");  
$selection = $_REQUEST['selection']; 
$post_ids = $_REQUEST['pid']; 
$tags= $_REQUEST['tag']; 


function untag_post($post_ids,$tags) { 
    global $wpdb; 
    if(! is_array($post_ids)) { 
     $post_ids = array($post_ids); 
    } 
    if(! is_array($tags)) { 
     $tags = array($tags); 
    } 

    foreach($post_ids as $post_id) { 
     $terms = wp_get_object_terms($post_id, 'post_tag'); 
     $newterms = array(); 
     foreach($terms as $term) { 
      if (!in_array($term->name,$tags)) { //$term will be a wordpress Term object. 
       $newterms[] = $term; 
      } 
     } 
     wp_set_object_terms($post_id, $newterms, 'post_tag', FALSE); 

    } 
} 

ура

+0

вызов ajax запускается при каждой загрузке страницы, потому что для этого установлен тайм-аут в 10 микросекунд. Чтобы действительно понять, что происходит с вызовом ajax, вы также должны опубликовать содержимое projekt-getter.php, куда вы отправляете свой запрос ajax. – MSTannu

+0

Вам нужно начинать отступать от кода в фигурных скобках, потому что это просто нечитаемо. – developerwjk

+0

projekt-getter.php - последняя функция, которую я опубликовал. – mordondro

ответ

0

я получил его на работу. Возникла проблема с $ post_ids и $ post_id. Он был назначен двойным.

Это мой окончательный код для тех, кто любит, чтобы его:

Что это делает. Он назначает тег при нажатии на ссылку и отменяет прежний. Я использую его, чтобы пользователи могли изменять статус прикрепленного файла в архиве или нет.

HTML-:

<a href="#" rel="ap_aktuell" class="json_click_handler2" alt="<?php echo $attachment->ID; ?>"><img width="30px" src="<?php echo get_template_directory_uri(); ?>/images/icons/beard.png"></a> 

Сделать taguntagfunc.php в вашем Themes-Folder

include("../../../wp-load.php");  

$selection = $_REQUEST['selection']; 
$post_id = $_REQUEST['pid']; 
$tag= $_REQUEST['tag']; 


if($tag==ap_aktuell){ 
$untag= 'ap_aktuell'; 
$inserttag= 'ap_archiv'; 
untag_post($post_id,$untag); 
wp_set_post_tags($post_id, $inserttag, false); 

} 

elseif($tag==ap_archiv){ 
$untag= 'ap_archiv'; 
$inserttag= 'ap_aktuell'; 
untag_post($post_id,$untag); 
wp_set_post_tags($post_id, $inserttag, false); 

} 

Используйте этот JS-скрипт для прослушивания по ссылке, которая .json_click_handler2 назначена. Он будет проходить отн и альт-атрибуты функции:

jQuery(document).ready(function(){ 

jQuery('.json_click_handler2').click(function(){ 

var c = jQuery(this).attr('rel'); 
var d = jQuery(this).attr('alt'); 
jQuery.ajax({ 
      url: 'wp-content/themes/kleinraumv4_ap/taguntagfunc.php', 
      data:{ 
       'pid' : d, 
       'tag' : c 
       }, 
      dataType: 'html', 
      success:function(){ 
         window.location.reload(true); 
    }, 
      error: function(errorThrown){ 
       alert('error'); 
       console.log(errorThrown); 
      } 


    }); 

    }); 
}); 

наконец в вашем использовании functions.php следующей функции один, что на самом деле делает то, что вы хотите. ЮНТАГ.

function untag_post($post_ids,$tags) 
{ 
    global $wpdb; 
    if(! is_array($post_ids)) 
    { 
     $post_ids = array($post_ids); 
    } 

    if(! is_array($tags)) 
    { 
     $tags = array($tags); 
    } 

    foreach($post_ids as $post_id) 
    { 
     $terms = wp_get_object_terms($post_id, 'post_tag'); 
     $newterms = array(); 
     foreach($terms as $term) 
     { 
      if (!in_array($term->name,$tags)) 
      { //$term will be a wordpress Term object. 
       $newterms[] = $term; 
      } 
     } 

     wp_set_object_terms($post_id, $newterms, 'post_tag', FALSE); 
    } 
} 


function get_tag_ID($tag_name) { 
$tag = get_term_by('name', $tag_name, 'post_tag'); 
if ($tag) { 
return $tag->term_id; 
} else { 
return 0; 
} 
} 

Я использовал get_tag_ID, чтобы получить идентификатор текущего назначенного теге различать архив и не архив.