Причина, по которой у вас проблемы, заключается в том, что the_permalink () и the_title () не возвращаются, они отражаются. Вместо этого используйте get_permalink () и $ post-> post_title . Помните, get_permalink () требует в качестве параметра идентификатор записи ($ post-> ID). Я знаю, что это раздражает и противоречит интуиции, но именно так работает Wordpress (см. Субъективность в комментариях к этому ответу.)
Это объясняет, почему второй пример работает в вашем первоначальном вопросе. Если вы вызываете функцию, которая печатает из строки, эхо будет выводиться до конца строки.
Итак, это:
echo ' this should be before the link: '.the_permalink().' But it is not.';
не будет работать должным образом. Вместо этого он выведет это:
http://example.com this should be before the link: But it is not.
В PHP вы можете использовать как одинарные, так и двойные кавычки. Когда я строю строки с помощью HTML, я обычно начинаю строку с одинарных кавычек, поэтому я могу использовать HTML-совместимые двойные кавычки внутри строки без экранирования.
Таким образом, чтобы округлить это, это будет выглядеть примерно так:
echo '<li><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>';
Или, как вы изначально просили, чтобы просто избежать их, ставьте обратную косую черту перед цитатой. Вот так (одинарные кавычки были удалены)
echo "<li><a href=\"".get_permalink($post->ID)."\">".$post->post_title."</a></li>";
Это, конечно, при условии, что вы вызываете это из внутри цикла , в противном случае для получения желаемого результата потребуется чуть больше, чем это необходимо.