Skocz do zawartości


Zenbox.pl promocja
Zdjęcie
- - - - -

Usuwanie nieaktualnych postów z "ulubionych"

favorites toolset posts trash

  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 betamat

betamat
  • Bloger
  • 3 postów

Napisano 30.07.2017 - 13:52

Witam.
Potrzebuję dodać funkcję do skryptu "ulubione", niestety moja znajomość PHP jest prawie zerowa...
Funkcja ma usuwać z "ulubionych" posty, które są już w 'koszu'.
Posty są dodawane jako CPT (Toolset).

Kod w functions.php obecnie wygląda tak:

function wptypes_listvfav_func($atts=array(), $content=null)
{
extract( shortcode_atts( array(), $atts ) );
if (function_exists('wpfp_get_users_favorites')):
$favorite_post_ids = wpfp_get_users_favorites();

$limit = 10;
$content .= "";
    if ($favorite_post_ids):
    $c = 0;
    $favorite_post_ids = array_reverse($favorite_post_ids);
    foreach ($favorite_post_ids as $post_id) {
    if ($c++ == $limit) break;
    $p = get_post($post_id);
        $content .= render_view_template(1757, $p);
    }
    else:
    $content .= "";
    $content .= "<h4 class='fav-empty'>Tu jest miejsce na Twoje ulubione ogłoszenia</h4>";
    $content .= "";
    endif;
    $content .= "";
endif;
return $content;
}
add_shortcode('wptypes_listvfav', 'wptypes_listvfav_func');


Wydaje mi się, że dla osoby obeznanej z PHP nie jest to trudne, ale może jestem ignorantem... :)
Będę wdzięczny za pomoc.



#2 ziemekpr0

ziemekpr0

    aktywność:

  • +Bloger
  • 15 postów
  • Płeć:Mężczyzna
  • Interests:WordPress, e-commerce, technologie webowe, muzyka

Napisano 30.07.2017 - 19:01

Po takim opisie ciężko będzie pomóc... skrypt "ulubione" tak na prawdę niewiele mówi. Osobiście widziałem kilkanaście implementacji ulubionych i każda różniła się choćby sposobem przechowywania tej informacji, co jest tutaj kluczowe.

 

Nie za bardzo rozumiem tutaj zastosowanie add_shortcode? Nie wiem też po co ci te linijki ze stringami? Co to ma do rzeczy?

$content .= "<h4 class='fav-empty'>Tu jest miejsce na Twoje ulubione ogłoszenia</h4>";

Skoro funkcja ma usuwać z ulubionych, to powinieneś ją podpiąć pod hook przejścia danego wpisu z jednego statusu do drugiego: https://codex.wordpr...tus_Transitions

 

W ciele funkcji wystarczy określić ID postu, który został przeniesiony do kosza i skasowanie wszystkich rekordów z tym ID w tabeli (?) ulubionych?



#3 betamat

betamat
  • Bloger
  • 3 postów

Napisano 31.07.2017 - 14:11

No tak, pokazując tylko shortcode nie pomagam zbyt wiele w rozwiązaniu problemu...

Plugin jest tutaj: https://github.com/h...-favorite-posts

 

Shortcode jest po to by jako pozycję w 'ulubionych' można pokaz to co się chce. Plugin domyślnie pokazuje tylko link do postu. Odwołanie $content .= render_view_template(1757, $p); to "template" utworzony przy pomocy Toolset'a.

 

 

W ciele funkcji wystarczy określić ID postu, który został przeniesiony do kosza i skasowanie wszystkich rekordów z tym ID w tabeli (?) ulubionych?

Brzmi prosto, ale bez znajomości PHP raczej nie do zrobienia :)


Użytkownik betamat edytował ten post 31.07.2017 - 14:12


#4 ziemekpr0

ziemekpr0

    aktywność:

  • +Bloger
  • 15 postów
  • Płeć:Mężczyzna
  • Interests:WordPress, e-commerce, technologie webowe, muzyka

Napisano 02.08.2017 - 19:28

Wszystko fajnie tylko nie rozumiem, co Ty chcesz pokazywać przez tę funkcję? Do tej pory zrozumiałem, że chcesz "oczyścić" listę ulubionych z postów przeniesionych do kosza. Z ciekawości zainstalowałem plugin ale z najnowszą wersją WP niestety nie działa :)

 

Napisałem z palca coś takiego:

<?php

function on_post_trash($ID, $post)
{
    // A function to perform actions when a post is trashed.
    // https://codex.wordpress.org/Post_Status_Transitions

    // Pobierz liste wszystkich uzytkownikow z postem przypisanym do ulubionych
    // https://codex.wordpress.org/Function_Reference/get_users
    $users = get_users(array(
        'meta_key'    => 'wpfp_favorites',
        'meta_value'  => $ID
    ));

    // https://codex.wordpress.org/Function_Reference/delete_metadata
    // Usuniecie wszystkich wpisow o ulubionym poscie z list uzytkownikow
    // delete_metadata ( $meta_type, $object_id, $meta_key, $meta_value, $delete_all )

    foreach($users as $user)
    {
        delete_metadata ('user', $user->ID, 'wpfp_favorites', $ID);
    }

}
add_action('trash_post',  'on_post_trash', 10, 2);

// UWAGA! edytuj powyzsza linijke z 'trash_post' - zamien 'post' na twoja nazwą typu posta

Nie mam pojęcia, czy to będzie działać w tej formie, ale nie powinno być już daleko. Generalnie, można to sprowadzić do pojedynczego zapytania mySQL, które po prostu kasuje wszystkie rekordy w tabeli user_postmeta na podstawie identyfikatora usuwanego posta i meta_key.




Użytkownicy przeglądający ten temat: 0

0 members, 0 guests, 0 anonymous users

Poprzedni adres WWW tego tematu: http://www.wordpress.org.pl/Usuwanie-nieaktualnych-postów-z-"ulubionych"-t17419.html