Zrozumieć, dlaczego kod nie działa, wordpress
logika powinna być taka:
Pobieranie kategorii wpisu: Musisz określić kategorię (lub taksonomię) dla typu wpisów price, w którym będzie używany Twój shortcode. Pozwoli to później filtrować wpisy według tej kategorii. Pobieranie listy wpisów według kategorii z wypełnionym polem ACF link_price: Następnie musisz pobrać wszystkie wpisy z tej kategorii, w których pole Advanced Custom Fields (ACF) link_price jest wypełnione. Oznacza to, że będziesz wykonywać zapytania do bazy danych lub korzystać z funkcji WordPress do wyszukiwania wpisów spełniających te kryteria. Tworzenie cen dla tabeli: Musisz stworzyć dwa warianty tworzenia cen dla tabeli, w zależności od dostępnych danych dotyczących cen metali: Jeśli dla każdego metalu osobno istnieje więcej niż 5 wpisów z ceną z ostatnich 30 dni (spośród wcześniej uzyskanych wpisów), cena jest tworzona na podstawie tych danych. Jeśli dla metalu jest mniej niż 5 cen z ostatnich 30 dni, ceny w tabeli są tworzone na podstawie wszystkich dostępnych danych dotyczących cen z ostatnich 30 dni, bez filtrowania według wpisów.
function scrap_metal_prices_shortcode($atts) {
global $wpdb;
$attributes = shortcode_atts([
'metal' => '',
], $atts);
$metals = explode(',', $attributes['metal']);
$post_id = get_the_ID();
$categories = wp_get_post_terms($post_id, 'category');
if (!empty($categories) && !is_wp_error($categories)) {
$category_id = $categories[0]->term_id;
}
$posts_with_prices = get_posts([
'post_type' => 'price',
'category' => $category_id,
'meta_query' => [
[
'key' => 'link_price',
'compare' => '!=',
'value' => ''
]
],
'fields' => 'ids'
]);
$valid_post_ids = implode(',', array_map('intval', $posts_with_prices));
$metal_prices_data = [];
foreach ($metals as $metal) {
$query = $wpdb->prepare("
SELECT COUNT(p.id) AS count, tm.metal_name
FROM {$wpdb->prefix}types_of_metal tm
LEFT JOIN {$wpdb->prefix}prices p ON tm.metal_id = p.metal_id AND p.post_id IN ($valid_post_ids)
WHERE tm.metal_name = %s AND p.date >= CURDATE() - INTERVAL 30 DAY
GROUP BY tm.metal_name
", $metal);
$result = $wpdb->get_row($query);
if ($result && $result->count >= 1) {
$metal_prices_data[$metal] = 'use_specific_posts';
} else {
$metal_prices_data[$metal] = 'use_all_posts';
}
}
// Wykonujemy zapytanie do bazy danych w celu uzyskania cen zgodnie z podaną logiką
$prices_output = []; // Tablica do przechowywania wyników
foreach ($metal_prices_data as $metal => $data_source) {
if ($data_source === 'use_specific_posts') {
$query = $wpdb->prepare("
SELECT tm.metal_name, MAX(p.date) AS last_update,
AVG(p.value) AS average_price,
MAX(p.value) AS high_price,
MIN(p.value) AS low_price
FROM {$wpdb->prefix}types_of_metal tm
LEFT JOIN {$wpdb->prefix}prices p ON tm.metal_id = p.metal_id
WHERE tm.metal_name = %s AND p.post_id IN ($valid_post_ids) AND p.date >= CURDATE() - INTERVAL 30 DAY
GROUP BY tm.metal_name
", $metal);
} else {
$query = $wpdb->prepare("
SELECT tm.metal_name, MAX(p.date) AS last_update,
AVG(p.value) AS average_price,
MAX(p.value) AS high_price,
MIN(p.value) AS low_price
FROM {$wpdb->prefix}types_of_metal tm
LEFT JOIN {$wpdb->prefix}prices p ON tm.metal_id = p.metal_id
WHERE tm.metal_name = %s AND p.date >= CURDATE() - INTERVAL 30 DAY
GROUP BY tm.metal_name
", $metal);
}
$prices_output[$metal] = $wpdb->get_row($query);
}
// Początek tabeli
$output = '
Nazwa metalu
Najwyższa cena
Średnia cena
Najniższa cena
Data aktualizacji
Cena podana w zł za 1 kg
';
// Tablica z polskimi nazwami miesięcy
$polMonths = [
1 => 'sty', 2 => 'lut', 3 => 'mar', 4 => 'kwi', 5 => 'maj', 6 => 'cze',
7 => 'lip', 8 => 'sie', 9 => 'wrz', 10 => 'paź', 11 => 'lis', 12 => 'gru'
];
// Wyświetlanie wyników w tabeli
foreach ($prices_output as $metal => $row) {
if ($row) {
// Pobieranie numeru miesiąca z daty
$monthNum = date('n', strtotime($row->last_update));
// Zamiana angielskiej nazwy miesiąca na polską
$polMonth = $polMonths[$monthNum];
// Formatowanie daty
$formattedDate = date('d ', strtotime($row->last_update)) . $polMonth . date(' Y', strtotime($row->last_update));
$output .= sprintf(
'%s%.2f zł%.2f zł%.2f zł%s',
esc_html($metal), // Nazwa metalu
$row->high_price, // Najwyższa cena
$row->average_price, // Średnia cena
$row->low_price, // Najniższa cena
$formattedDate // Data aktualizacji
);
}
}
// Koniec tabeli
$output .= '';
return $output; // Zwracamy gotową tabelę
}
// Dodajemy shortcode
add_shortcode('scrap_metal_prices', 'scrap_metal_prices_shortcode');
Aktualne zlecenia dla freelancerów w kategorii PHP
Wykonanie prac po audycie SEO
1231 PLN
Potrzebny doświadczony programista OpenCart do wykonania SEO i technicznych poprawek sklepu internetowego. Główne zadania: Poprawa struktury wewnętrznych linków i menu. Dodanie linków w stopce. Realizacja okruszków z mikroformatowaniem Schema.org. Poprawa generacji sitemap.xml… PHP, Obsługa stron internetowych ∙ 9 godzin 2 minuty temu ∙ 44 oferty |
W module OpenCart naprawić problemy z Facebook APIW OpenCart jest moduł integracji Facebook i Instagram przez API, OAuth i Webhook. Po otwarciu strony modułu w przeglądarce - w Facebooku zaczyna rosnąć liczba zapytań API do Facebooka i rośnie liczba błędów gr:get:InvalidID. Należy znaleźć, co powoduje problemy i naprawić… PHP, Programowanie stron internetowych ∙ 10 godzin 17 minut temu ∙ 31 ofert |
Zrobić wtyczkę WordPress do ankiety (quizu)
820 PLN
Potrzebujemy opracować wtyczkę WordPress, która będzie potrafiła - przechowywać bank pytań, wszystkie w tym samym formacie - pytanie i 4 odpowiedzi, 1 poprawna - pokazywać 12 pytań w losowej kolejności, liczyć czas - zbierać dane użytkownika - pokazywać końcowy wynik z… PHP, Programowanie stron internetowych ∙ 17 godzin 45 minut temu ∙ 87 ofert |
Potrzebna integracja KeyCRM → PRRO KaszalotTrzeba skonfigurować integrację między KeyCRM a PRRO Kaszalot. Podczas składania zamówienia w KeyCRM dane mają być automatycznie przesyłane do Kaszalota: • informacje o zamówieniu • towary, asortyment • ceny • ilość Szczegóły w wiadomości prywatnej. Content Management Systems, PHP ∙ 3 dni 5 godzin temu ∙ 28 ofert |
Strona na WordPressie z wykorzystaniem motywu Kadence i Kadence Blocks.
820 PLN
Musimy stworzyć stronę na WordPressie z wykorzystaniem motywu Kadence oraz Kadence Blocks. Sklepu internetowego nie będzie (chociaż prawdopodobnie zostanie dodany w przyszłości). Potrzebna jest strona główna oraz kilka stron wewnętrznych. Grafika jest już gotowa, struktura… Content Management Systems, PHP ∙ 4 dni 15 godzin temu ∙ 38 ofert |